2013-06-17 3 views
0

Я получил набор данных из db Northwind с целью отображения через webgrid в представлении. Однако, когда я создаю экземпляр объекта клиента, ошибки при преобразовании поля «id» в значение int. Вот мой код ...Проблемы, связанные с преобразованием строки DataSet в Integer

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, ул варианты NumberStyles, NumberBuffer & номер, NumberFormatInfo информация , Boolean parseDecimal) +10726387 System.Number.ParseInt32 (String с, NumberStyles стиль, NumberFormatInfo информация) +145 System.Int32.Parse (String S) +23
Movie.Controllers.HelloController.List() в с: \ Users \ peter_000 \ Documents \ Visual Studio 2012 \ Projects \ Movie \ Movie \ Controllers \ HelloCo ntroller.cs: 52
lambda_method (Закрытие, ControllerBase, Object []) +101

Цель состоит в том, чтобы переместить все это вне к веб-сервиса и назвать его в качестве службы. Вероятно, это должно быть тривиально, но я не могу найти способ обойти его.

Может ли кто-нибудь посоветовать или предложить лучший способ сделать это?

+0

Что содержит 'dr [0]'? Вы использовали отладчик для просмотра значения? – nmat

+0

Вы пробовали без использования ToString(), например id = dr [0], или вы могли бы использовать int.TryParse (dr [0] .ToString(), out id)? – Edper

+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, не следует рассматривать как приглашение называть его при каждой возможности.

+0

Работаю отлично сейчас, спасибо за советы Jon –

Смежные вопросы