Joh*_*ohn 4 .net c# sql guid uniqueidentifier
如何在不首先使用.ToString()传递给GUID的构造函数的情况下,将ExecuteScalar命令的结果转换为GUID结构?
这样做的原因是性能,而不是在内存中创建数千个不必要的字符串对象.
可以使用阅读器和GetGUID方法,但在使用标量值时,我看不到任何关于如何实现相同的参考.
更新:我还需要处理DBNull值
假设你的sql语句不能返回DBNull.Value,那么你可以:
Guid myResult = (Guid) cmd.ExecuteScalar();
Run Code Online (Sandbox Code Playgroud)
编辑:现在我们知道你需要处理空值.... :-)
我可以想到两种处理空值的方法 - 使用可空的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;
}
}
Run Code Online (Sandbox Code Playgroud)
要么
static Guid GetGuidFromDb(object dbValue)
{
if (dbValue == null || DBNull.Value.Equals(dbValue))
{
return Guid.Empty;
}
else
{
return (Guid) dbValue;
}
Run Code Online (Sandbox Code Playgroud)
然后打电话
Guid? myResult = GetGuidFromDb(cmd.ExecuteScalar());
Run Code Online (Sandbox Code Playgroud)
注意 - 如果您的SQL命令返回UniqueIdentifier以外的数据类型,这将会阻塞.