将DataSet字符串转换为Integer时出现问题

时间:2013-06-17 18:11:09

标签: c# asp.net-mvc-4

我从northwind db中检索了一个数据集,以便通过视图中的webgrid显示出来。但是,当我实例化客户对象时,将'id'字段转换为int值时会出错。这是我的代码......

    public ActionResult List()
    {
        SqlConnection conn;
        SqlDataAdapter myDataAdapter;
        DataSet myDataSet;

        string cmdString = "SELECT CustomerID, CompanyName, ContactName, ContactTitle FROM Customers";

        conn = new SqlConnection("Data Source=PETERPC\\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True");
        myDataAdapter = new SqlDataAdapter(cmdString, conn);

        myDataSet = new DataSet();
        myDataAdapter.Fill(myDataSet, "Customers");

        foreach (DataRow dr in myDataSet.Tables[0].Rows)
        {
            customers.Add(new Customer() { id = int.Parse(dr[0].ToString()), co_name = dr[1].ToString(), name = dr[2].ToString(), title = dr[3].ToString() });
        }



        return View(customers);
    }

在控制器文件顶部声明的列表......

private List<Customer> customers = new List<Customer>();

但是我有很多方法可以解决这个问题,但是在id = int.Parse(dr[0].ToString())总是错误的情况下,如果我不使用ID,它会正常运行。

以下是错误消息......

  

[FormatException:输入字符串的格式不正确。] System.Number.StringToNumber(String str,NumberStyles options,   NumberBuffer&安培; number,NumberFormatInfo info,Boolean parseDecimal)   +10726387 System.Number.ParseInt32(String s,NumberStyles style,NumberFormatInfo info)+145 System.Int32.Parse(String s)+23
  Movie.Controllers.HelloController.List()in   c:\ Users \ peter_000 \ Documents \ Visual Studio   2012 \项目\电影\电影\ \控制器HelloController.cs:52个
  lambda_method(Closure,ControllerBase,Object [])+101

目标是将所有这些转移到Web服务并将其称为服务。这应该是微不足道的,但我似乎无法绕过它。

有人可以建议或建议更好的方法吗?

1 个答案:

答案 0 :(得分:3)

为什么首先将它转换为字符串?假设实际int类型,只需转换:

// Property names changed to be more sensible
customers.Add(new Customer {
    Id = (int) dr[0],
    CompanyName = (string) dr[1],
    ContactName = (string) dr[2],
    Title = (string) dr[3]
});

当然,如果它是64位整数,则将其强制转换为long(等)。

尽可能避免使用字符串转换 - 只是因为所有公开ToString方法的方法都不应被视为邀请您随时调用它。