如何在不首先使用.ToString()传递给GUID的构造函数的情况下,将ExecuteScalar命令的结果转换为GUID结构?
执行此操作的原因是性能,而不是在内存中创建数千个不必要的字符串对象。
可以使用阅读器和GetGUID方法,但在使用标量值时,我看不到任何关于如何实现相同的参考。
更新:我还需要处理DBNull值
答案 0 :(得分:7)
假设您的sql语句无法返回DBNull.Value,那么您可以:
Guid myResult = (Guid) cmd.ExecuteScalar();
编辑:现在我们知道你需要处理空值....: - )
我可以想到两种处理空值的方法 - 使用可以为空的Guid并将其设置为null,或者使用常规Guid并在SQL语句返回null时将其设置为Guid.Empty。
考虑某种形式的辅助函数或扩展方法来检查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以外的数据类型,这将会阻塞。
答案 1 :(得分:-1)
如果从命令返回的对象是UniqueIdenitifier,则为yes。
答案 2 :(得分:-1)
Guid myResult = cmd.ExecuteScalar() as Guid? ?? Guid.Empty;