DataTable行计数始终返回1

时间:2013-06-05 13:59:19

标签: c# ms-access datatable

我试图使用数据适配器获取表的总行数,但我的行计数总是返回1.当我使用阅读器时,我得到准确的数字。我想使用dataAdapter。

这是我的代码:

public double GetRowNumber()
    {
        using (OleDbConnection con = new OleDbConnection(someConnectionString))
        {
            con.Open();
       String cmdString = "SELECT COUNT (*) FROM " + "[" + Table +"]" 

            OleDbDataAdapter db = new OleDbDataAdapter(cmdString, dbConn);
            DataTable dt = new DataTable();
            db.Fill(dt);
            return dt.Rows.Count;

        }
    }

有什么想法吗?

3 个答案:

答案 0 :(得分:6)

您的功能将始终返回1,因为

SELECT COUNT (*) FROM " 

语句将为您的数据表填充1条记录,即计数。

如果要使用行计数

   con.Open();
   String cmdString = "SELECT COUNT (*) FROM " + "[" + Table +"]" 
   OleDbCommand cmd = new OleDbCommand();
   cmd.Text = cmdString ;
   cmd.Connection = con;
   int count = Convert.ToInt32(cmd.ExecuteScalar());

更快速,更轻松地满足您的需求。您不必使用像datatable这样的对象。

答案 1 :(得分:1)

因为您的查询只返回一行。如果您运行sql server manager并执行查询。

结果将是这样的。

enter image description here

答案 2 :(得分:0)

该表只有一行。它包含一个单元格,其中包含查询中表格的数据库中的行数。也就是说,查询结果是一行,一列设置。

而不是dt.Rows.Count,你可以返回dt.Rows[0][0];,但这太过分了。但在这样的情况下,我认为使用ExecuteScalar()是最好的做法(来自kostas的忍者,所以对他赞不绝口。)