【问题标题】:c# datatable row count returns 1 for empty tablec# datatable 行计数为空表返回 1
【发布时间】:2020-07-16 00:36:33
【问题描述】:

我正在查询 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 可能是这项工作的错误工具,但如果是这样,我不清楚我应该使用什么

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

【问题讨论】:

  • 我认为您在 DGV 中有一个空白行,因此您可以向表中添加新行。所以你的计数总是比实际行多一。为什么不使用 dt 行数而不是 DGV 数?

标签: c# sql-server executereader record-count


【解决方案1】:

通常您会希望用 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;

【讨论】:

    猜你喜欢
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多