c# - 在 C# 中处理来自 SQL 的 Null 类型

标签 c# sql null

我正在使用 SqlDataReader 从 SQL 表中获取值并将它们分配给各自的变量。但是在我的表中,intdouble 类型的列具有空值。因此,当我尝试读取 null int 并将其分配给 int 变量时,它崩溃了。

以下是值的分配方式:

public int ID { get; set; }
public int Map { get; set; }
public int TypeID { get; set; }

这是阅读它们的地方:

while (objSqlDataReader.Read())
{
    data= new data();
    emissiondata.ID = (int)objSqlDataReader["EFID"];
    emissiondata.Map = (int)objSqlDataReader["EFMappingID"];
    emissiondata.TypeID =(SqlInt32)objSqlDataReader["MobileTypeID"];

因此,如果其中任何一个为 null,即使我正在调试它,它也会崩溃并且不会继续。 我如何处理 SQL 中的 null 值,如果 intnull,我如何将空值分配给它?

最佳答案

DBNull.Value 适用于 DataTable 行,我不确定 SqlDataReader:

bool isNull = objSqlDataReader.GetOrdinal("EFID") == DBNull.Value;

如果使用 SqlDataReader 的 GetSqlInt32,GetSqlDateTime, etc例如,它们是开箱即用的 null 感知。

而不是拆箱:

emissiondata.ID = (int)objSqlDataReader["EFID"];

您改为这样做:

SqlInt32 emissionId = objSqlDataReader.GetSqlInt32(emissionIdOrdinal);

然后你可以直接测试null:

if (emissionId.IsNull) ...

但是,这些方法需要列的序号才能访问值。您可以在循环之前设置这些序数

int emissionIdOrdinal = rdr.GetOrdinal("EFID");

但是如果你真的想要 C# 的 null,你可以为它创建一个辅助函数:

public static int? ToNullable(this SqlInt32 value)
{
    return value.IsNull ? (int?) null : value.Value;
}

使用可空变量访问它:

int? emissionId = objSqlDataReader.GetSqlInt32(emissionIdOrdinal).ToNullable();

您现在可以直接测试 null 了:

if (emissionId == null)

一个建议,尝试将类的属性更改为可空类型,从而排除使用其他变量的需要:

public int? ID { get; set; }
public int? Map { get; set; }
public int? TypeID { get; set; }

最终代码:

data= new data();
emissiondata.ID = objSqlDataReader.GetSqlInt32(emissionIdOrdinal).ToNullable();
emissiondata.Map = objSqlDataReader.GetSqlInt32(emissionMapOrdinal).ToNullable();

关于c# - 在 C# 中处理来自 SQL 的 Null 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10441291/

相关文章:

c# - 如何在 session 变量中保存多个值

c# - 无法让我的更新工作

mysql - 根据另外两个表更新列值(MySQL)

sql - 临时表整理冲突 - 错误 : Cannot resolve the collation conflict between Latin1* and SQL_Latin1*

android - 在另一个 Intent 中传递一个字符串不起作用

我可以在需要 int* 的地方传递 NULL 吗?

c# - SecurityManager.IsGranted() 行为

c# - 使用计算机作为USB通信中间人

php - 字典搜索词 - 在 PHP 和 MySQL 中的最佳性能

java:使用缓冲阅读器并检查字符串是否为空