【问题标题】:C# OleDbDataReader returns no records but manual sql returns recordsC# OleDbDataReader 不返回记录,但手动 sql 返回记录
【发布时间】:2017-04-29 23:08:31
【问题描述】:

我有以下几点:

try
            {
                string u = "select count(*) from my_table";
                OleDbCommand runu = new OleDbCommand(u, connection);
                OleDbDataReader readu = runu.ExecuteReader();
                if (readu.HasRows)
                {
                    while (readu.Read())
                    {
                        exists = readu[0].ToString();
                    }
                    readu.Dispose();
                }
                connection.Close();
            }
            catch (Exception g)
            {
                OraLog.log(g.ToString());
            }

如果我抓取 select 语句并通过 SQLDeveloper 运行它,我会取回记录。

我在其他事情上使用了相同的代码块,它工作正常,但这次......由于某种原因它没有返回任何记录。

我已断开与 SQLDeveloper 的连接并重新连接并确保数据已提交。

我也没有得到任何异常,我只是没有返回任何结果。

谢谢,

【问题讨论】:

  • 您的连接是否打开?有什么例外吗?记录了什么异常?你调试代码了吗?
  • No Exception 我调用了 connection.Open() 我已经将它包裹在一个 try catch 但没有例外不完全确定交易是什么......如果我抓住命令并将粘贴复制到sqldev 它的工作原理。

标签: c# sql oracle


【解决方案1】:

我注意到的第一件事是缺少 connection.Open();,然后我注意到当您只检索一个值时,您将其作为 Execute.Reader() 运行。

我做了一点重写,在尝试之前添加int RowCount,添加connection.Open(),然后通过ExecuteScalar() 命令设置它的值,这将只返回查询的第一个值。我还将connection.Close() 移动到finally 块中。

我没有按原样使用您的exist,因为它看起来应该是bool,而不是字符串,您可以添加任何支持代码来使用 RowCount 值执行您想要的操作。

int RowCount;
try {
    connection.Open();
    string u = "select count(*) from my_table";
    OleDbCommand runu = new OleDbCommand(u, connection);
    RowCount = (int)runu.ExecuteScalar();
}
catch (Exception g) { /* unchanged */ }
finally {  connection.Close(); }

如果命令失败,RowCount 将等于 null,并且无论表中有多少行,都是 0+ 的整数。

【讨论】:

  • 我会试试这个,并发布结果谢谢
  • 不客气。如果您仍有问题,请告诉我,或者如果它适合您,请将其标记为已回答。
  • 将其标记为答案它帮助我弄清楚它实际上没有提交.....我将数据导入数据库并且从未运行过提交。感谢您的帮助
猜你喜欢
  • 2013-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-26
  • 2021-03-13
  • 2022-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多