关于 ds.Tables[0] 出错
平台是VS2005+SQL2000。。我是初学者代码如下
public DataTable Getmessagelist(string strcond) //实现查询
{
DataSet ds = new DataSet();
string strsql = "select a.*,b.* from book_message a inner join book_user b on a.[user_id]=b.[user_id]" + strcond;
Database db = DatabaseFactory.CreateDatabase();
DbCommand cmd = db.GetSqlStringCommand(strsql);
try
{
ds = db.ExecuteDataSet(cmd);
}
catch (Exception ex)
{
this.Errmsg = ex.Message.ToString();
}
return ds.Tables[0]; ///这里提示出错
}
SQL语句能在查询分析器查出结果。。但是
ds.Tables[0]; 总是提示找不到表 0/。郁闷。。。希望大家帮忙解决一下。。 --------------------编程问答-------------------- up --------------------编程问答-------------------- 你直接返回ds不就行了吗?
不然你调用的地方要ds这么办呢? --------------------编程问答-------------------- sql出错.
--------------------编程问答-------------------- SQL语句确认没出错。。
不知道 whoo529() 。你说的是什么意思? --------------------编程问答-------------------- return ds;看看 --------------------编程问答-------------------- 测试下你的sql看执行是否正确 --------------------编程问答-------------------- 回huzech
一个是dataset ,一个是 datatable 类型,肯定不能进行转换啊 --------------------编程问答-------------------- sql 语句在调试的时候,检查确认没有错误 --------------------编程问答-------------------- 调试看看
ds.Tables[0]
到底是什么??
--------------------编程问答-------------------- datatable dt=ds.tables[0];
return dt; --------------------编程问答-------------------- 回 hdt
直接提示 “找不到表 0” --------------------编程问答-------------------- b.[user_id]" + strcond
俩ID和你想的一样么?
--------------------编程问答-------------------- 看看ds.Tables.Count是多少,如果为0,说明没有取到数据
--------------------编程问答-------------------- 回 fengniao996_163
SQL语句直接在查询分析器里执行。能正常返回数据。。 --------------------编程问答-------------------- public DataSet Getmessagelist(string strcond) //实现查询
{
DataSet ds = new DataSet();
string strsql = "select a.*,b.* from book_message a inner join book_user b on a.[user_id]=b.[user_id]" + strcond;
Database db = DatabaseFactory.CreateDatabase();
DbCommand cmd = db.GetSqlStringCommand(strsql);
try
{
ds = db.ExecuteDataSet(cmd);
}
catch (Exception ex)
{
ds = null;
this.Errmsg = ex.Message.ToString();
}
return ds; ///这里提示出错
} --------------------编程问答-------------------- 看看ds.Tables.Count是多少,如果为0,说明没有取到数据
-------
同意!
还有
ds = db.ExecuteDataSet(cmd);这个 db.ExecuteDataSet返回的是什么呢; --------------------编程问答-------------------- ds.Tables[0] 索引为0的表没找到....
只能证明查询数据库没有结果集.....
把SQL语句改下放到SQL查询分析器下运行...看看有问题没....
如果SQL语句没问题...那就只能是你的查询数据库代码问题了.....
--------------------编程问答-------------------- 建议用适配器的FILL方法..... --------------------编程问答-------------------- 谢谢大家了,看看先,解决问题了,再给分,我都是初学者,以后希望大家多多帮助 --------------------编程问答-------------------- try
{
ds = db.ExecuteDataSet(cmd);
}
catch (Exception ex)
{
this.Errmsg = ex.Message.ToString();
}
代码跟踪一下上面的代码是不是异常了 --------------------编程问答-------------------- 调试显示。。。ds = db.ExecuteDataSet(cmd);
ds的值都为 null
sql语句显示正常。。都不知道这是什么原因了 --------------------编程问答-------------------- 调试显示。。。ds = db.ExecuteDataSet(cmd);
ds的值都为 null
sql语句显示正常。。都不知道这是什么原因了
---------------------------------------------------------
只有去看ExecuteDataSet方法了 --------------------编程问答-------------------- string strsql = "select a.*,b.* from book_message a inner join book_user b on a.[user_id]=b.[user_id]" + strcond;
strcond?是什么东西,贴出来看看 --------------------编程问答-------------------- strcond 是空值。。。
判断输入查询条件或是不输入查询条件的SQL语句 --------------------编程问答-------------------- yan53125。。谢谢你的提议,我现在去看看 --------------------编程问答-------------------- ExecuteDataSet()晕我也写了个这个方法 --------------------编程问答-------------------- ExecuteDataSet()这个方法是什么?里面的东西是怎么执行的?执行跟进去看看啊。 --------------------编程问答-------------------- public DataSet Getmessagelist(string strcond) //实现查询
{
string strsql = "select a.*,b.* from book_message a inner join book_user b on a.[user_id]=b.[user_id]" + strcond;
Database db = DatabaseFactory.CreateDatabase();
DbCommand cmd = db.GetSqlStringCommand(strsql);
DataSet ds = null;
try
{
ds = db.ExecuteDataSet(cmd);
}
catch
{
ds = null;
}
return ds;
}
看看这样行不行啊!!!! --------------------编程问答-------------------- if(ds.Tables.Count>0)
return ds.Tables[0]; ///这里提示出错 --------------------编程问答-------------------- ds = db.ExecuteDataSet(cmd);
这个方法有可能返回一个null值(如果查询结果集为空的话)
所以应该判断一下ds.Tables.Count的值再返回结果 --------------------编程问答-------------------- 回chengjun_java:
也还是不行。。。那个ds的值一直都为null --------------------编程问答-------------------- a inner join book_user b 之间是否少了一个"'"? --------------------编程问答-------------------- lslcyt 除了SQL查询导致结果集为空以外,请问还有其它原因导致结果集为空吗? --------------------编程问答-------------------- 该回复被版主删除 --------------------编程问答-------------------- 查询出错, --------------------编程问答-------------------- try
{
ds = db.ExecuteDataSet(cmd);
}
catch (Exception ex)
{
this.Errmsg = ex.Message.ToString();
}
建议去掉 try catch 个人估计的查询有异常发生 --------------------编程问答-------------------- if(ds!=null && ds.Tables.Count>0)
{
return ds.Tables[0];
} --------------------编程问答-------------------- 建议用ds.Fill()填充DataSet --------------------编程问答-------------------- 我也认为直接用fill填充好返回 --------------------编程问答-------------------- 总上:
肯定是ExecuteDataSet 中出了问题~~~ --------------------编程问答-------------------- 企业库的类库,你连的是sqlserver
要强制转换为sql类型的连接dbdatabase要转换sqldatabase --------------------编程问答-------------------- 给分,我昨天回去时,想到的,肯定是sql出错!
string strsql = "select a.*,b.* from book_message a inner join book_user b on a.[user_id]=b.[user_id]" + strcond;
这句sql strcond 应该是string变量吧?
我以前也碰到这个问题.
"" 里加个空格!这样写:
string strsql = "select a.*,b.* from book_message a inner join book_user b on a.[user_id]=b.[user_id] " + strcond;
--------------------编程问答-------------------- 在设置一下断点:
string strsql = "select a.*,b.* from book_message a inner join book_user b on a.[user_id]=b.[user_id]" + strcond;
在执行这条语句后,将strsql变量的值全部复制到查询分析器中运行,如果它能等到结果,说明你返回记录集的方法有问题. --------------------编程问答-------------------- elvanic()
除了SQL查询导致结果集为空以外,请问还有其它原因导致结果集为空吗?
有可能在你引用的方法里面,判断了某个条件,条件不满足则直接return null,所以你得到的DataSet是null
其他的,好像没有了…… --------------------编程问答-------------------- 打个断点看看 catch到什么错误了 --------------------编程问答-------------------- sql错误 语句到查询分析器里面运行一下 --------------------编程问答-------------------- Public Function GetDataReader(ByVal sql As String) As SqlDataReader
Try
Dim Conn As SqlConnection
Conn = New SqlConnection(strSqlConn)
Dim SqlCmd As SqlCommand = New SqlCommand(sql, Conn)
Conn.Open()
Dim sqlDr As SqlDataReader = SqlCmd.ExecuteReader(CommandBehavior.CloseConnection)
Return sqlDr
Catch ex As Exception
Throw (ex)
End Try
End Function
----
Public Function GetSqlDataSource(ByVal sql As String) As SqlDataSource
Try
Dim SqlDs As SqlDataSource
SqlDs = New SqlDataSource
SqlDs.ConnectionString = strSqlConn
SqlDs.SelectCommand = sql
Return SqlDs
Catch ex As Exception
End Try
End Function
------
Public Function GetDataSet(ByVal sql As String) As DataSet
Try
Dim Conn As SqlConnection
Conn = New SqlConnection(strSqlConn)
Dim sqlDa As SqlDataAdapter = New SqlDataAdapter(Sql, Conn)
Dim ds As DataSet = New DataSet
Conn.Open()
sqlDa.Fill(ds, "a")
Conn.Close()
sqlDa.Dispose()
Conn.Dispose()
GetDataSet = ds
Catch ex As Exception
Throw (ex)
End Try
End Function --------------------编程问答-------------------- 你按下面来做就会有结果:
DataTable Dt=db.ExecuteDataSet(cmd).tables[0];
--------------------编程问答-------------------- 将返回语句改为
return ds["数据库你表明"];
这样应该是可以的 --------------------编程问答-------------------- SQL语句能在查询分析器查出结果。。但是
ds.Tables[0]; 总是提示找不到表 0/
那有可能连接数据库出错...
没有加connection吧,参数...
补充:.NET技术 , ASP.NET