Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C中SQL合并与DBNull检查#_C#_Sql_Performance - Fatal编程技术网

C# C中SQL合并与DBNull检查#

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

在我的项目中,我必须从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
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"] ?? "";