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.