c# SqlDataReader 数据库存储guid或null

标签 c# guid sqldatareader

我在数据库记录 1 和记录 2 中有两条记录。datareader 将返回记录 1 的 guid 值,代码工作正常。但在记录 2 上,数据读取器将返回“”。我的问题是如何无一异常(exception)地添加 String Empty,这两个选项都出错。 立竿见影

?dataReader["Id"].GetType().FullName
"System.Guid"

代码

while (dataReader.Read())
{
d.id = new Guid(dataReader["Id"].ToString());
//Guid.TryParse(dataReader["Id"]?.ToString(), out d.Id)
}

最佳答案

我看到了这个:

?dataReader["Id"].GetType().FullName
"System.Guid"

还有这个:

on record 2 the datareader will return ""

这两件事是不相容的。我怀疑您确实有一个 Guid 列并且记录 2 正在返回 NULL,这又在阅读器中显示为 DBNull.Value,并且为 DBNull.Value 结果调用 .ToString() 然后生成您在此处观察到的空字符串。

如果这是真的,你可以这样做:

while (dataReader.Read())
{
    if (dataReader["Id"] != DBNull.Value)
    {
        d.id = (Guid)dataReader["Id"];
    }
    else
    {
        //get an empty string
    }
}

现在的问题是 else block 。问题是这样说的:

How can I add String Empty without the exception

答案是:你不能。 C# 是一种强类型语言,我们已经看到 d.id 属性是一个 System.Guid您不能将字符串形的钉子放入 Guid 形的孔中。您必须将此字段留空,或者定义一些默认的 Guid 值以表示该值仍然为空,然后更改代码在其他地方显示空字符串而不是 Guid,则该值与选择的默认值匹配。

关于c# SqlDataReader 数据库存储guid或null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53303824/

相关文章:

c# - Guid.NewGuid().ToByteArray() 到字符串(数字)行是否仍然唯一

.net - SqlDataReader如何接收数据?

c# - 是否可以缓存在 lambda 表达式中计算的值?

c# - 无法使用 asp.net web 应用程序将数据插入 SQL Server 数据库

c# - 多线程 WebBrowser 控件 C# STA

guid - 如果我知道 MSI GUID,如何在注册表中找到程序位置?

c# - 来自 OracleDB 的长查询

c++ - GUID 作为 std::map 键

c# - 使用 linq 时如何最好地清理 SQLDataReader