Kob*_*uek 3 c# ado.net type-conversion
我有一个作为 int 的数据库字段。当我尝试这个时:
int val = Convert.ToInt32(row["Int_Field_Name"].ToString());
Run Code Online (Sandbox Code Playgroud)
有用。
但这看起来非常糟糕且无效。
我试过这些:
int val = row.Field<int>("Int_Field_Name");
int val = (int)row["Int_Field_Name"];
Run Code Online (Sandbox Code Playgroud)
但是他们抛出一个异常: 指定的强制转换无效
有没有更优雅更有效的方法?
问题是像大多数 ADO 类DataTable都是弱类型的,因此您可以直接从它们中提取的是object. 原因是底层提供者决定了数据类型。例如,当您的底层数据来自某个数据库时,您期望的int, 实际上可以是short、uint、ulong或long,甚至是DBNull.Value值。因此,您需要使用Convert.To*方法族才能完全安全。
但是在大多数情况下您不必做的一件事是调用ToString. 如果它们是可转换的,转换函数将很好地转换这些值。通过可转换,我的意思是它们将失败,例如,如果您尝试转换long大于int.MaxValueto的值int。
所以你最好的选择是使用
Convert.ToInt32(row["Int_Field_Name"])
Run Code Online (Sandbox Code Playgroud)
如果你觉得这很难看(我也有一点),你可以引入扩展方法,比如
public static int GetInt(this DataRow row, string fieldName) {
return Convert.ToInt32(row[fieldName]);
}
Run Code Online (Sandbox Code Playgroud)
并像myRow.GetInt("Int_Field_Name"). 当然,您可以通过一些检查并可能使用回退值等使此扩展更加健壮。
| 归档时间: |
|
| 查看次数: |
6696 次 |
| 最近记录: |