3

总而言之,我正在尝试找到一种优雅的方式来从DataRow. 以下是我尝试过的方式。请审查它。我认为它还不够好。因为当我要检索的字段数量很大时,它会很冗长。有更好的主意吗?谢谢。

  int result = -1;

  if (row["intCol"] != null)
  {
      bool bresult = int.TryParse(row["intCol"].ToString(), out result);
  }

更新

DB 中的intCol数据类型是可为空的字符串。

更新

从检查 DBNull 然后分配给变量的最有效方法中找到它?

干杯。

4

3 回答 3

3

使用Field, IsNull,SetField方法避免处理DBNull.Value.

在您发布的示例中,您可能只需要Field

int? result = row.Field<int?>("intCol");
// if intCol is DBNull.Value, result will now be null.
于 2013-06-10T08:19:00.527 回答
1

您可以使用内置Field<int?>属性来获取结果:

var result = row.Field<int?>("intCol");
于 2013-06-10T07:55:42.380 回答
1

您可以使用 Convert(特别是如果类型也可能是 BIGINT、SMALINT 等)。

 var i = Convert.ToInt32(row["intCol"]); // i is a int

请注意,这会将 NULL 转换为 0。

如果您非常确定 DB 类型是 INT(而不是 BIGINT、SMALINT、..),请使用“as”(DB NULL 将变为空引用)

 var i = row["intCol"] as int?; // i is a nullable int
于 2013-06-10T08:06:21.220 回答