2015-08-03 3 views
-1

Я пытаюсь сохранить данные от datagridview к базе данных. Я продолжаю получатьVisual Studio C# datagridview для базы данных

NullReferenceException: Object reference not set to an instance of an object


try 
{   
    foreach (DataGridViewRow row in dataGridView2.Rows) 
    {    
     using (conn = new SqlConnection(constring)) 
     { 
      using (SqlCommand cmd = new SqlCommand("INSERT INTO tbl_Students_Marks VALUES(@Student, @T1, @T2, @T3, @T4)", conn)) 
      { 
       cmd.Parameters.AddWithValue("@Student", (row.Cells["Student Number"].Value).ToString()); 
       cmd.Parameters.AddWithValue("@T1", row.Cells["Test 1"].Value); 
       cmd.Parameters.AddWithValue("@T2", row.Cells["Test 2"].Value); 
       cmd.Parameters.AddWithValue("@T3", row.Cells["Test 3"].Value); 
       cmd.Parameters.AddWithValue("@T4", row.Cells["Test 4"].Value); 
       conn.Open(); 
       cmd.ExecuteNonQuery(); 
       conn.Close(); 
+1

Можете ли вы указать номер строки, где вы получили эту ошибку? –

+0

Строка 9 в приведенном выше коде. –

+0

используйте индексный номер вместо имени индекса – dada

ответ

1

Похоже, ваше значение строка пуста.

Попробуйте заменить линию 9 с этим кодом:

  var studentNumber = row.Cells["Student Number"].Value 
      if (studentNumber == null || studentNumber is DBNull) 
       continue; 
      cmd.Parameters.AddWithValue("@Student", studentNumber.ToString()); 
+0

@ArtemNow это дает мне эту ошибку: *** Параметрированный запрос '(@Student nvarchar (4000), @ T1 nvarchar (4000), @ T2 nvarchar (4000), @' ожидает параметр '@ T1', который был не поставляется. *** –

+0

Нет, это не так. –

+0

Номер строки с ошибкой снова, пожалуйста (после того, как вы вставили мой код). –

1

Ммм попробовать это коды

try 
{   
foreach (DataGridViewRow row in dataGridView2.Rows) 
{    
    using (conn = new SqlConnection(constring)) 
    { 
     using (SqlCommand cmd = new SqlCommand(constring)) 
     { 
      cmd.Connection = con; 
      cmd.CommandText = "INSERT INTO tbl_Students_Marks VALUES(@Student, @T1, @T2, @T3, @T4)"; 
      cmd.CommandType = CommandType.Text 
      cmd.Parameters.AddWithValue("@Student", (row.Cells["Student Number"].Value).ToString()); 
      cmd.Parameters.AddWithValue("@T1", row.Cells["Test 1"].Value); 
      cmd.Parameters.AddWithValue("@T2", row.Cells["Test 2"].Value); 
      cmd.Parameters.AddWithValue("@T3", row.Cells["Test 3"].Value); 
      cmd.Parameters.AddWithValue("@T4", row.Cells["Test 4"].Value); 
      conn.Open(); 
      cmd.ExecuteNonQuery(); 
      conn.Close(); 

я надеюсь, что это поможет вам

+0

он по-прежнему дает мне то же исключение –

+0

какое исключение? – kulotskie

1

Вы должны удалить пустую строку из нижней части вашей DataGridView первым. поэтому вы не можете вставить последнюю строку. как это (Set AllowUserToAddRows к False в DataGridView Properties или Добавить dataGridView2.AllowUserToAddRows = false; в вашем заполняющей DataGridView метод):

dataGridView2.DataSource = ds.Tables[0]; 
dataGridView2.AllowUserToAddRows = false; 

Тогда остальную часть вашего кода INSERT.

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