将ExecuteScalar结果转换为GUID而不使用字符串?

Joh*_*ohn 4 .net c# sql guid uniqueidentifier

如何在不首先使用.ToString()传递给GUID的构造函数的情况下,将ExecuteScalar命令的结果转换为GUID结构?

这样做的原因是性能,而不是在内存中创建数千个不必要的字符串对象.

可以使用阅读器和GetGUID方法,但在使用标量值时,我看不到任何关于如何实现相同的参考.

更新:我还需要处理DBNull值

Nei*_*oss 7

假设你的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以外的数据类型,这将会阻塞.