C# C中SQL合并与DBNull检查#
在我的项目中,我必须从SQL中检索大量数据并将数据映射到对象字段;大概是这样的:C# C中SQL合并与DBNull检查#,c#,sql,performance,C#,Sql,Performance,在我的项目中,我必须从SQL中检索大量数据并将数据映射到对象字段;大概是这样的: cu.UnitName = dr["UnitName"].ToString().Trim(); cu.LocalId = DbUtil.RemoveNull(dr["LocalID"], ""); cu.DatabaseName = DbUtil.RemoveNull(dr["DatabaseName"], ""); cu.DatabaseServer = DbUtil.RemoveNull(dr["Databas
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
version,string
version类似):
所以我想知道SQL的
合并
或ISNULL是否能更快地完成同样的工作。有人做过类似的比较吗?哪种方法更有效?从数据库返回数据时,您可以这样做
select COALESCE (data ,defaultValue) from table
这会更快,因为不需要从前端代码执行RemoveNull函数,而需要在sql中使用以下语句:
cu.LocalId = dr["LocalId"] ?? "";
选择ISNULL(值为0)
当存在空值时,它将始终返回0。因此,您不必在代码端对其进行转换
请参阅''返回其参数中的第一个非空表达式,因此您可能会使用ISNULL
在数据库查询中使用ISNULL
会快得多。假设您有一百万条记录,并且您调用了一百万次C#方法,这肯定需要一些时间来执行
另一方面,SQL引擎经过优化,可以处理大量记录。但这不够灵活。您不能使用一些复杂的逻辑并轻松更改默认值。为什么不自己进行比较呢?无论怎样,性能都不会成为问题。您应该选择看起来更易于维护的内容。请尝试ISNULL
。请参见此处,了解原因(它更快):如果您选择C路径,我建议使用String.Empty而不是“”。当然,我所说的合并是指消除空值的“SQL方式”。这里的问题不是ISNULL或COALESCE,而是SQL方式比C#方式快。更新了问题。请参阅我对该问题的最后评论。请参阅我对该问题的最后评论。
cu.LocalId = dr["LocalId"] ?? "";