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
块中包含OracleConnection
和OracleCommand
。
让我把问题说得更清楚些。我想知道为什么在使用 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 语句
oracle reader 返回 System.Data.OracleClient.OracleCommand 作为值