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

时间:2011-01-10 16:10:58

标签: c# .net sql guid uniqueidentifier

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

执行此操作的原因是性能,而不是在内存中创建数千个不必要的字符串对象。

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

更新:我还需要处理DBNull值

3 个答案:

答案 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;