我试图使用数据适配器获取表的总行数,但我的行计数总是返回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;
}
}
有什么想法吗?
答案 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并执行查询。
结果将是这样的。
答案 2 :(得分:0)
该表只有一行。它包含一个单元格,其中包含查询中表格的数据库中的行数。也就是说,查询结果是一行,一列设置。
而不是dt.Rows.Count,你可以返回dt.Rows[0][0];
,但这太过分了。但在这样的情况下,我认为使用ExecuteScalar()是最好的做法(来自kostas的忍者,所以对他赞不绝口。)