c# - 在不使用字符串的情况下将 ExecuteScalar 结果转换为 GUID?

标签 c# .net sql guid uniqueidentifier

如何在不首先使用 .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/

相关文章:

c# - 如何在mvc中从另一个 Controller 调用一个 Controller 中编写的函数

.net - 为什么我的 UDP 广播失败?

c# - 递归如何打印列表的总和

c# - Enumerable.ElementAt<TSource> 有什么意义?

sql - 使用 SQL 查找最大信息

c# - FindAsync - 数据库 'master' 中的 CREATE DATABASE 权限被拒绝

c# - 当 Enumerable 在 Linq 中有超过 X 个元素时提前返回

c# - 可移植类库中的操作如何超时?

mysql - 只在表为空时插入

mysql - 删除 MySQL 中字段具有重复数字的行