gpt4 book ai didi

c# - 没有返回结果时处理 ExecuteScalar()

转载 作者:IT王子 更新时间:2023-10-29 03:47:10 24 4
gpt4 key购买 nike

我正在使用以下 SQL 查询和 ExecuteScalar() 方法从 Oracle 数据库中获取数据:

sql = "select username from usermst where userid=2"
string getusername = command.ExecuteScalar();

它向我显示此错误消息:

System.NullReferenceException: Object reference not set to an instance of an object

userid=2 的数据库表中没有行时,会发生此错误。
我应该如何处理这种情况?

最佳答案

根据 MSDN documentation for DbCommand.ExecuteScalar :

If the first column of the first row in the result set is not found, a null reference (Nothing in Visual Basic) is returned. If the value in the database is null, the query returns DBNull.Value.

考虑以下片段:

using (var conn = new OracleConnection(...)) {
conn.Open();
var command = conn.CreateCommand();
command.CommandText = "select username from usermst where userid=2";
string getusername = (string)command.ExecuteScalar();
}

在运行时(在 ODP.NET 下测试,但在任何 ADO.NET 提供程序下都应该相同),它的行为如下:

  • 如果该行不存在,command.ExecuteScalar()的结果为空,然后转换为空字符串并分配给 getusername .
  • 如果该行存在,但用户名为 NULL(这在您的数据库中是否可行?),command.ExecuteScalar() 的结果是DBNull.Value ,导致 InvalidCastException .

无论如何,NullReferenceException应该是不可能的,所以你的问题可能出在别处。

关于c# - 没有返回结果时处理 ExecuteScalar(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1999020/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com