2014-12-25 4 views
-4

Ниже приводится код для него:Входная строка не была в правильном формате в C#, INT значение не в правильном формате

protected void Upload(object sender, EventArgs e) 
     { 
      if (FileUpload1.HasFile) 
      { 
       //Upload and save the file 
       string csvPath = Server.MapPath("~/App_Data/") + Path.GetFileName(FileUpload1.PostedFile.FileName); 
       FileUpload1.SaveAs(csvPath); 


      DataTable dt = new DataTable(); 
      dt.Columns.AddRange(new DataColumn[7] 
      { 
      new DataColumn("pataintno", typeof(int)), 
      new DataColumn("Firstname", typeof(string)), 
      new DataColumn("Lastname",typeof(string)), 
      new DataColumn("Age", typeof(int)), 
      new DataColumn("Address", typeof(string)), 
      new DataColumn("Email", typeof(string)), 
      new DataColumn("Phno", typeof(int)),}); 


      string csvData = File.ReadAllText(csvPath); 
      foreach (string row in csvData.Split('\n')) 
      { 
       if (!string.IsNullOrEmpty(row)) 
       { 
        dt.Rows.Add(); 
        int i = 0; 
        foreach (string cell in row.Split(',')) 
        { 
         dt.Rows[dt.Rows.Count - 1][i] = cell; 
         i++; 
        } 
       } 
      } 

      string consString = ConfigurationManager.ConnectionStrings["cnstr"].ConnectionString; 
      using (SqlConnection con = new SqlConnection(consString)) 
      { 
       using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con)) 
       { 
        //Set the database table name 
        sqlBulkCopy.DestinationTableName = "Pataint"; 
        con.Open(); 
        sqlBulkCopy.WriteToServer(dt); 
        con.Close(); 
        Array.ForEach(Directory.GetFiles((Server.MapPath("~/App_Data/"))), File.Delete); 
       } 
      } 
     } 
     else 
     { 
      Label1.Text = "PlZ TRY AGAIN"; 
     } 
    } 
+0

Добро пожаловать в StackOverflow. Пожалуйста, добавьте детали на свой вопрос, на линии ведьмы вы получаете ошибку? Вы пробовали что-нибудь решить? если вы, какой результат? – Sefa

+0

В чем вопрос? В чем проблема ? Что вы пробовали? – Sievajet

ответ

0

Я проверил код, и он кажется прекрасным. Я предлагаю вам проверить файл csv и убедиться, что нет заголовков для каких-либо столбцов.

1

У вас есть DataTable с 3 полями целого типа, ошибка говорит, что одна или несколько данных, извлеченных из вашего файла, являются недопустимыми целыми числами.

Таким образом, вы должны проверить на плохой вход (как всегда в таких случаях)

// Read all lines and get back an array of the lines 
    string[] lines = File.ReadAllLines(csvPath); 

    // Loop over the lines and try to add them to the table 
    foreach (string row in lines) 
    { 
     // Discard if the line is just null, empty or all whitespaces 
     if (!string.IsNullOrWhiteSpace(row)) 
     { 
      string[] rowParts = row.Split(','); 

      // We expect the line to be splittes in 7 parts. 
      // If this is not the case then log the error and continue 
      if(rowParts.Length != 7) 
      { 
       // Log here the info on the incorrect line with some logging tool 
       continue; 
      } 

      // Check if the 3 values expected to be integers are really integers 
      int pataintno; 
      int age; 
      int phno; 

      if(!Int32.TryParse(rowParts[0], out pataintno)) 
      { 
       // It is not an integer, so log the error 
       // on this line and continue 
       continue; 
      } 
      if(!Int32.TryParse(rowParts[3], out age)) 
      { 
       // It is not an integer, so log the error 
       // on this line and continue 
       continue; 
      } 
      if(!Int32.TryParse(rowParts[6], out phno)) 
      { 
       // It is not an integer, so log the error 
       // on this line and continue 
       continue; 
      } 

      // OK, all is good now, try to create a new row, fill it and add to the 
      // Rows collection of the DataTable 
      DataRow dr = dt.NewRow(); 
      dr[0] = pataintno; 
      dr[1] = rowParts[1].ToString(); 
      dr[2] = rowParts[2].ToString(); 
      dr[3] = age 
      dr[4] = rowParts[4].ToString(); 
      dr[5] = rowParts[5].ToString(); 
      dr[6] = phno; 
      dt.Rows.Add(dr); 
     } 
    } 

Проверка на ваш вход осуществляется с помощью Int32.TryParse, что вернет ложь, если строка не может быть преобразована в целое число. В этом случае вы должны написать какой-то журнал ошибок, чтобы посмотреть, когда цикл завершен, и выяснить, какие строки являются неправильными, и исправить их.

Заметьте также, что я изменил свой код в некоторых точках: Используйте File.ReadAllLines так что вы уже ваш вклад расщепленных на каждой новой строке (без проблем, если новая строка просто \n или \r\n код), а также код чтобы добавить новую строку в ваш datatable, следует следовать шаблону: создать новую строку, заполнить ее значениями, добавить новую строку в существующую коллекцию.

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