首页 > 解决方案 > c# datatable 行计数为空表返回 1

问题描述

我正在查询 SQL Server 数据库并填充数据表。但即使我的 sql 没有返回任何值,数据表的行数似乎也是一个。这是我的代码:

strSQL = "My sql string"
cmd.CommandText = strSQL;
cmd.Parameters.AddWithValue("@wsNo", wsNo);
cmd.Parameters.AddWithValue("@reachNo", reachNo);
using (DataTable dt = new DataTable())
    {
        dt.Load(cmd.ExecuteReader());
        MyTextbox.Text = dt.Rows.Count.ToString();
        myGridview.DataSource = dt;
        myGridview.DataBind();
    }

gridview 正确显示数据,如果 sql 没有返回记录,则根本不显示。但我想在文本框中显示记录数,当没有记录时,它总是 1。我检查过的几个地方暗示 ExecuteReader 可能是这项工作的错误工具,但如果是这样,我不清楚我应该使用什么

编辑:我使用数据适配器重建了这段代码,它现在似乎可以工作了。我不明白为什么,不应该有所作为,但我想重写代码修复了我做错的任何事情。无需进一步评论。感谢回复的人。

标签: c#sql-serverexecutereaderrecord-count

解决方案


通常,您会希望用 DataAdapter 填充您的 DataSet。您不需要 DataTable 来使用 DataReader 带回一条记录。但您可以这样做:

DataTable dt = new DataTable("TableName");

using (connection)
{
    SqlCommand command = new SqlCommand(sSQL, connection);
    connection.Open();

    using (SqlDataReader reader = command.ExecuteReader())
    {
        dt.Load(reader);
    }
}

YourControl.Text = dt.Rows.Count;

推荐阅读