C# 从数据行获取价值的最佳方式是什么?

C# 从数据行获取价值的最佳方式是什么?,c#,asp.net,datatable,C#,Asp.net,Datatable,总之,我试图找到一种从DataRow中检索值的优雅方法。下面是我尝试过的方法。请复习一下,我觉得还不够好。因为当我要检索的字段数量很大时,它会很冗长。还有更好的主意吗?谢谢 int result = -1; if (row["intCol"] != null) { bool bresult = int.TryParse(row["intCol"].ToString(), out result); } 已更新 DB中的intCol数据类型是可为空的字符串 已更新 是

总之,我试图找到一种从
DataRow
中检索值的优雅方法。下面是我尝试过的方法。请复习一下,我觉得还不够好。因为当我要检索的字段数量很大时,它会很冗长。还有更好的主意吗?谢谢

  int result = -1;

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

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

已更新

是从哪里找到的


干杯。

您可以使用内置的
字段
属性获得结果:

var result = row.Field<int?>("intCol");
var结果=行字段(“intCol”);
您可以使用Convert(特别是如果类型也可能是BIGINT、SMALINT等)

注意,这会将NULL转换为0

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

使用、方法避免处理

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

int? result = row.Field<int?>("intCol");
// if intCol is DBNull.Value, result will now be null.
int?结果=行字段(“intCol”);
//如果intCol是DBNull.Value,则结果现在将为null。

如果
row[“intCol”]
始终是一个int,则只需执行以下操作:
int result=(int)row[“intCol”]
。另一方面,首先检查类型。int->string->int转换(我认为你正在做的)如果你知道应该是什么类型的话,看起来是错误的-
row.Field(“intCol”)
(为了避免在
DBNull
中失败),很抱歉忘记指定
intCol
的DB类型。它是可为空的字符串。谢谢。你好@Cuong Le,如果DB中的值为空怎么办?我们应该使用
int?
还是
var
?谢天谢地,在最坏的情况下。DB类型可以是可为空的字符串。我想。然后在选中行[“intCol”]==DBNull.Value之后使用“Convert”?注意
字段
方法只会将值强制转换为指定的类型。它不会尝试数据类型转换。这意味着,如果该值实际上是一个
十进制
,并且您指定了
int
,您将得到一个
InvalidCastException
。如果在运行时不能完全确定数据类型,则应坚持使用
Convert.ToInt32(行[“intCol”])
以允许类型转换。。。。再加上一个
IsNull
预先检查列。我明白了。因此,为什么不使用
tryparse
,尤其是当原始数据类型为string时。谢谢。如果原始类型是字符串,我肯定会使用
TryParse
Convert.ToXXX
可以为您转换字符串,但它始终使用用户当前的区域设置来确定如何解析数字和日期。另见:
 var i = row["intCol"] as int?; // i is a nullable int
int? result = row.Field<int?>("intCol");
// if intCol is DBNull.Value, result will now be null.