c# - 允许空值时如何将 nvarchar(x) 读入 String?

标签 c# .net sql-server

我有一个 SQL 表,其中有一列类型为 nvarchar(20)并想使用 SqlDataReader 阅读该专栏.看起来唯一的方法是使用 GetSqlChars()其次是 ToSqlString() :

 String result = reader.GetSqlChars(index).ToSqlString().Value

问题是,如果存储的值恰好为 null(这对我的情况有效),我会得到

[SqlNullValueException: Data is Null. This method or property cannot be called on Null values.]
System.Data.SqlTypes.SqlString.get_Value() +3212527

所以我必须首先检查 ToSqlString() 返回的值是什么返回 IsNull() :

SqlString asSqlString = reader.GetSqlChars(index).ToSqlString();
String result = asSqlString.IsNull() ? null : asSqlString.Value;

这可行,但需要大量额外代码,而且看起来真的很不雅观。

有没有更优雅的方式达到同样的效果?

最佳答案

也许:

var value = reader.IsDBNull(index) ? null : reader.GetString(index);

或者更短:

var value = reader[index] as string;

关于c# - 允许空值时如何将 nvarchar(x) 读入 String?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12933658/

相关文章:

c# - 比较时间时 DateTimeKind 是否被忽略?

sql-server - 使用docker在Mac os上的sql server中导入csv会出现权限错误

SQL Server 选择查询动态列输出

c# - 如何在 Visual Studio 2012 解决方案中安装 System.Reactive 扩展?

c# - 简单的 ASP.NET Core 路由问题

.net - 无法在没有 FrameworkAssemblies 的情况下解决程序集引用问题

sql-server - SQL Server 中的临时表

c# - 退出表格 - 使用 "ProcessDialogKey"优于 "KeyUp"的优势

c# - 在 Linq 中将两个属性分组为一个

c# - 升级到 C# 10 .net 6 现在在构建 Context.cs OnModelCreatingPartial(ModelBuilder modelBuilder) 时出现编译错误;