当前位置:编程学习 > C#/ASP.NET >>

关于 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
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,