2

我正在尝试使用数据适配器获取表的总行数,但我的行数始终返回 1。当我使用阅读器时,我得到了准确的数字。我想使用数据适配器。

这是我的代码:

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;

        }
    }

有任何想法吗?

4

3 回答 3

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());

更快更轻,满足您的需求。您不必使用诸如数据表之类的对象。

于 2013-06-05T14:02:32.920 回答
1

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

结果会是这样。

在此处输入图像描述

于 2013-06-05T14:09:16.607 回答
0

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

您可以使用 return 代替 dt.Rows.Count,dt.Rows[0][0];但这太过分了。但在这种情况下,我认为使用ExecuteScalar()是最佳实践(来自 kostas 的忍者,因此对他表示赞赏和赞成)。

于 2013-06-05T14:02:56.883 回答