【问题标题】:Getting int value from DataRow without converting to string从 DataRow 获取 int 值而不转换为字符串
【发布时间】:2017-07-03 17:36:27
【问题描述】:

我有一个数据库字段作为 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"];

但是他们抛出了一个异常: 指定的演员表无效

有没有更优雅更有效的方法?

【问题讨论】:

标签: c# ado.net type-conversion


【解决方案1】:

问题是像DataTable 这样的大多数ADO 类都是弱类型的,所以你可以直接从中提取的只有object。原因是底层提供者决定数据类型是什么。例如,当您的基础数据来自某个数据库时,您期望的 int,实际上可以是 shortuintulonglong,甚至是 DBNull.Value 值。因此,您需要使用Convert.To* 方法族才能完全安全。

但在大多数情况下,您不必做的一件事是致电ToString。如果它们是可转换的,转换函数将很好地转换这些值。可转换是指它们将失败,例如,如果您尝试将大于int.MaxValuelong 值转换为int

所以你最好的选择是使用

Convert.ToInt32(row["Int_Field_Name"])

如果你觉得这样丑(我也有一点),你可以引入扩展方法,比如

public static int GetInt(this DataRow row, string fieldName) {
    return Convert.ToInt32(row[fieldName]);
}

并像myRow.GetInt("Int_Field_Name") 一样使用它。当然,您可以通过一些检查并可能使用后备值等来使此扩展更加健壮。

【讨论】:

    【解决方案2】:

    试试:

     int q = Convert.ToInt32(row["Int_Field_Name"]);
    

    还有ToInt16和64,看你需要什么

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      • 2016-07-30
      • 2018-10-08
      • 2012-03-24
      • 2014-01-25
      • 2013-07-31
      相关资源
      最近更新 更多