我有一个数据库字段为int。 当我尝试这个时:
int val = Convert.ToInt32(row["Int_Field_Name"].ToString());
它有效。
但这看起来非常糟糕且无效。
我试过这些:
int val = row.Field<int>("Int_Field_Name");
int val = (int)row["Int_Field_Name"];
但他们抛出异常: 指定演员无效
是否有更优雅,更有效的方式?
答案 0 :(得分:2)
尝试:
int q = Convert.ToInt32(row["Int_Field_Name"]);
还有ToInt16和64,取决于你需要的东西
答案 1 :(得分:2)
问题是大多数像DataTable
这样的ADO类是弱类型的,所以你可以直接从它们中提取object
。原因是底层提供者决定数据类型是什么。例如,当您的基础数据来自某个数据库时,您期望成为int
,实际上可能是short
,uint
,ulong
或{{1} },甚至long
值。因此,您需要使用DBNull.Value
方法系列才能完全安全。
但是在大多数情况下你不必做的一件事是调用Convert.To*
。转换函数将很好地转换值,如果它们是可转换的。转换我的意思是,如果您尝试将大于ToString
的{{1}}值转换为long
,它们将会失败。
所以你最好的选择是使用
int.MaxValue
如果你觉得这很丑陋(我也有点),你可以引入扩展方法,比如
int
并像Convert.ToInt32(row["Int_Field_Name"])
一样使用它。当然,您可以通过一些检查使这个扩展更加健壮,并且可能具有回退值等。