OracleCommand ExecuteScalar 有时返回 null

Posted

技术标签:

【中文标题】OracleCommand ExecuteScalar 有时返回 null【英文标题】:OracleCommand ExecuteScalar sometimes returns null 【发布时间】:2014-06-18 18:58:10 【问题描述】:

我正在使用下面的代码在 c# 中执行标量 sql 查询。 有时它会在我设置“res”的地方出现 NullReferenceException 失败。 任何想法为什么有时会发生这种情况? (也许当我同时做几个查询时) 注意:我使用相同的查询...有时它返回 null。

public void ExecScalarQuery(String query)

    OracleConnection conn = new OracleConnection(connectionString);
    try
    
        conn.Open();
        OracleCommand cmd = new OracleCommand();
        cmd.Connection = conn;
        cmd.CommandText = query;// "select count(*) from SALES_ADVENTUREWORKS2012.SALESORDERDETAIL where PRODUCTID=709";
        cmd.CommandType = CommandType.Text;
        cmd.CommandTimeout = QUERY_TIMEOUT;
        String res = cmd.ExecuteScalar().ToString();
    
    finally
    
        conn.Close();
    

【问题讨论】:

如果查询返回 null... 则不能调用 toString() 。 您还应该在using 块中包含OracleConnectionOracleCommand 让我把问题说得更清楚些。我想知道为什么在使用 SAME QUERY 时它会返回 null,这肯定会产生相同的结果。我有足够的经验知道 ToString 不适用于 null。 你能添加一个 catch 块,看看 ExecuteScalar() 是否抛出了某种异常? 【参考方案1】:

ExecuteScalar() 可能返回 null 值并不意外。简单地说,这是因为您运行的查询没有返回结果集。

当它发生时,你应该小心抓住它:

String res = "";
Object o = cmd.ExecuteScalar();
if (o != null)
    res = o.ToString();

【讨论】:

为了公平起见,通常 select count(*) 从不返回 null @DarrenKopp 当然,您假设注释掉的 SQL 是发生错误时发出的 SQL。问题的模糊性和“也许当我同时进行多个查询时”的陈述表明您可能错了。

以上是关于OracleCommand ExecuteScalar 有时返回 null的主要内容,如果未能解决你的问题,请参考以下文章

简单的 Oracle 查询返回 OracleCommand.CommandText 无效

如何使用 OracleCommand C# 执行不同的多条 SQL 语句

OracleCommand SQL 参数绑定

oracle reader 返回 System.Data.OracleClient.OracleCommand 作为值

如何通过 OracleCommand 使用 OracleTransaction 将父表的 id 传递给子表

OracleCommand 查询其中的空参数 - ORA-01008:并非所有变量都绑定