如何在不首先使用 .ToString() 传递给 GUID 的构造函数的情况下将 ExecuteScalar 命令的结果转换为 GUID 结构?
这样做的原因是性能,而不是在内存中创建数千个不必要的字符串对象。
可以使用阅读器和 GetGUID 方法,但我看不到任何关于如何在使用标量值时实现相同目的的引用。
更新:我还需要处理 DBNull 值
最佳答案
假设您的 sql 语句不能返回 DBNull.Value,那么您可以:
Guid myResult = (Guid) cmd.ExecuteScalar();
编辑:既然我们知道您需要处理空值....:-)
我可以想到两种处理 null 的方法 - 使用可为 null 的 Guid 并将其设置为 null,或者使用常规 Guid 并将其设置为 Guid.Empty 如果您的 SQL 语句返回 null。
考虑检查 DBNull.Value 的某种形式的辅助函数或扩展方法。
static Guid? GetGuidFromDb(object dbValue)
{
if (dbValue == null || DBNull.Value.Equals(dbValue))
{
return null;
}
else
{
return (Guid) dbValue;
}
}
或
static Guid GetGuidFromDb(object dbValue)
{
if (dbValue == null || DBNull.Value.Equals(dbValue))
{
return Guid.Empty;
}
else
{
return (Guid) dbValue;
}
然后调用
Guid? myResult = GetGuidFromDb(cmd.ExecuteScalar());
注意 - 如果您的 SQL 命令返回 UniqueIdentifier 以外的数据类型,这将会阻塞。
关于c# - 在不使用字符串的情况下将 ExecuteScalar 结果转换为 GUID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4648812/