繁体   English   中英

C#中的SQL COALESCE与DBNull检查

[英]SQL COALESCE vs. DBNull check in C#

在我的项目中,我必须从SQL检索大量数据并将数据映射到对象字段。 像这样的东西:

cu.UnitName = dr["UnitName"].ToString().Trim();
cu.LocalId = DbUtil.RemoveNull(dr["LocalID"], "");
cu.DatabaseName = DbUtil.RemoveNull(dr["DatabaseName"], "");
cu.DatabaseServer = DbUtil.RemoveNull(dr["DatabaseServer"], "");
cu.UserName = DbUtil.RemoveNull(dr["UserName"], "");
cu.Password = DbUtil.RemoveNull(dr["Password"], "");
cu.RoleId = DbUtil.RemoveNull(dr["RoleId"], 0);

DbUtil.RemoveNull在以下位置( int版本, string版本类似):

public static int RemoveNull(object data, int defaultValue)
    {
        if (data is DBNull || data == null)
            return defaultValue;
        return int.Parse(data.ToString());
    }

所以我想知道SQL的COALESCEISNULL是否可以更快地完成相同的工作。 有人做了类似的比较吗? 哪种方法更有效?

从数据库返回数据时,您可以

select COALESCE (data ,defaultValue) from table

这样会更快,因为不需要从前端代码执行RemoveNull函数

cu.LocalId = dr["LocalId"] ?? "";

而是在您的sql中使用以下语句:

SELECT ISNULL(value,0)

当为NULL时,它将始终返回0。 因此,您不必在代码端进行转换。

请参考http://msdn.microsoft.com/en-us/library/ms184325.aspx

' COALESCE '返回其参数中的第一个非null表达式,因此您可能会使用ISNULL

在数据库查询中使用ISNULL将更快。 假设您有1m条记录,并且您调用C#方法1m次,这肯定会花费一些时间来执行。

另一方面,SQL引擎经过了优化,可以处理大量记录。 但这还不够灵活。 您不能使用一些复杂的逻辑来轻松更改默认值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM