【问题标题】:Datarow not returning the exact number of rowsDatarow 未返回确切的行数
【发布时间】:2018-08-13 16:41:07
【问题描述】:

每当我在 MySql 中运行此查询时,它总是返回 3 行具有相同 ID 但不同的记录,但在我的代码中,它只返回 1 行。

这是我的代码:

public DataTable DBSelect(string commandSelect)
{
    try
    {
        var sqlComm = new MySqlCommand();
        var sql

        DataAdapter = new MySqlDataAdapter();
        var dt = new DataTable();

        clsGlobals.gvConnMy = null;
        if (clsGlobals.gvConnMy == null)
        {
            clsGlobals.gvConnMy = CreateConnection(clsGlobals.gvstrConnString);
        }

        if (clsGlobals.gvConnMy.State == ConnectionState.Closed)
        {
            clsGlobals.gvConnMy.Open();
        }
        sqlComm = clsGlobals.gvConnMy.CreateCommand();
        sqlComm.CommandTimeout = 0;
        sqlComm.CommandText = commandSelect;
        dt.Load(sqlComm.ExecuteReader());
        sqlComm.Dispose();
        return dt;

【问题讨论】:

  • 如果您手动运行 sql,您会得到 3 行(即是 sql 问题还是 c# 问题)。
  • 是的,它显示了 3 行,就像这篇文章中所附的图片一样。但是在数据行中。只有 1 个
  • 我怀疑 commandSelect 不是您的屏幕截图中的内容。
  • 我使用的查询与屏幕截图中的查询完全相同。 :(
  • 在第 6 行,“var sql”后面应该没有分号吗?

标签: c# mysql sql datarow


【解决方案1】:

根据this,我认为这是正常行为。

“Load 方法从加载的 IDataReader 中消费第一个结果集,并在成功完成后,将读取器的位置设置为下一个结果集(如果有)。”

我认为您必须迭代直到加载所有记录。

【讨论】:

  • 我不明白。它如何以及为什么不返回它应该返回的所有行?
  • 我认为确实如此,但我认为您需要执行以下操作:while (reader.HasRows) { dt.Load... }
  • @AngeloSanchez 你试过这样吗? MySqlDataReader myReader = myCommand.ExecuteReader(); try { while (myReader.Read()) { Console.WriteLine(myReader.GetInt32(0).ToString() + ", " + myReader.GetString(1)); } } finally { // always call Close when done reading. myReader.Close(); } 来自here
【解决方案2】:

我能够通过将 dt.Load 更改为 sqlDataReader.Fill 来解决问题。

【讨论】:

    猜你喜欢
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多