是否有一种整洁的方法来处理SQL中的空值"选择*"防止c#/ vb中出现错误?

时间:2014-10-01 10:38:40

标签: c# sql .net sql-server vb.net

假设我有以下问题:

SQL

Select *
from tblExample
where Id = @Id

值通常不应具有空值,但有时会出于我无法控制的原因。

在类属性中分配时出现错误,例如(从“DBNull”类型转换为“Integer”类型无效):

VB

dim dr as DataRow = 'Data from Database'
Dim object1 As New myObject

object1.Number = CInt(dr("Number"))
object1.Name = CStr(dr("Name"))
object1.Active = CBool(dr("Active"))

C#

DataRow dr = //Data from Database
myObject object1 = new myObject();

object1.Number = (int)dr["Number"];
object1.Name = (string)dr["Name"];
object1.Active = (bool)dr["Active"];

是否有更短的等价物然后写出:

SQL

Select isnull(columnA, 0), isnull(columnB, ''), isnull(columnC, false)
from tblExample
where Id = @Id

感谢。

1 个答案:

答案 0 :(得分:2)

你真的需要DataRow吗?你可以在小巧玲珑中做到这一点:

int Id = ...
var object1 = conn.Query<ObjectType>("Select * from tblExample where Id = @Id",
    new { Id }).SingleOrDefault();

这将为您完成所有映射,因为列匹配,并将正确处理null;之后,object1.Number.Name.Active将符合您的预期。