0

我从 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>();

但是我有很多方法可以解决这个问题,但是在 foreach 中 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() 在 c:\Users\peter_000\Documents\Visual Studio 2012\Projects\Movie\Movie\Controllers\HelloController.cs:52
lambda_method(闭包,ControllerBase,对象[])+101

目标是将所有这些转移到 Web 服务中并将其称为服务。这可能应该是微不足道的,但我似乎无法找到解决方法。

任何人都可以建议或建议更好的方法吗?

4

1 回答 1

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方法,不应该被视为每次有机会调用它的邀请。

于 2013-06-17T18:13:49.813 回答