C#OleDbDataReader不返回任何记录,但手动sql返回记录

时间:2017-04-29 23:08:31

标签: c# sql oracle

我有以下内容:

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并确保数据已提交。

我也没有任何例外,我只是没有结果。

谢谢,

1 个答案:

答案 0 :(得分:0)

我注意到的第一件事是缺少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 +整数。