2015-07-23 4 views
0

Я создал ComboBox, в котором отображаются все имена таблиц из моей базы данных. Когда я нажимаю кнопку, текущая таблица отображается в DataGridView. Я преуспел создать кнопку Insert, чтобы добавить новые данные в текущей таблице, но doesn'e обновить данные в моей базе данных ... Вот код:C# DataGridView не обновляется в базе данных

private void insertBttn_Click(object sender, EventArgs e) 
    { 
     SqlConnection con = new SqlConnection(@"Data Source=NUC\MICROGARDE;Initial Catalog=SQL;Integrated Security=True"); 

     int i = 0; 
    //  SqlDataAdapter sda; 

     con.Open(); 

     for (i = 0; i < this.dataGridView1.Rows.Count; i++) 
     { 
      string query = "insert into " + comboBox1.SelectedValue.ToString() + " (@" + dataGridView1.Columns[i] + ") VALUES ('" + this.dataGridView1.Columns[i] + "');"; 

      SqlCommand cmd = new SqlCommand(query, con); 
     } 

     con.Close(); 
+0

Iv'e не работал с GridViews и ADO.NET на некоторое время, но вам не нужно выполнять команду? (cmd.ExecuteNonQuery();) –

+0

ну ... У меня возникла ошибка, когда я пытаюсь сделать что-то вроде этого: SqlCommand cmd = new SqlCommand (query, con); SqlDataReader myReader; myReader = cmd.ExecuteReader(); –

+0

@ francydarkcool- Вам не нужно 'ExecuteReader', вам нужно' ExecuteNonQuery', так как ваш sql - это инструкция 'INSERT', которую вам нужно просто выполнить, а не возвращать какие-либо данные или что-то еще. –

ответ

0

Изменить код и проверить

protected void insertBttn_Click(object sender, EventArgs e) 
    { 
     SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString()); 
     int i = 0; 
     int j = 0; 
     string query = ""; 
     string columnText = ""; 
     string valueText = ""; 

     SqlCommand cmd = new SqlCommand(); 
     cmd.CommandType = System.Data.CommandType.Text; 
     cmd.Connection = con; 

     for (i = 0; i < dataGridView1.Rows.Count; i++) 
     { 
      columnText = ""; 
      valueText = ""; 
      for (j = 0; j < dataGridView1.Rows[0].Cells.Count; j++) 
      { 
       if (j != 0) 
       { 
        columnText += ","; 
        valueText += ","; 
       } 
       columnText += dataGridView1.HeaderRow.Cells[j].Text; 
       valueText += "'" + dataGridView1.Rows[i].Cells[j].Text + "'"; 
      } 
      query += "insert into " + comboBox1.SelectedValue.ToString() + " (" + columnText + ") values (" + valueText + ")"; 
     } 

     try 
     { 
      cmd.CommandText = query; 
      con.Open(); 
      cmd.ExecuteNonQuery(); 
      con.Close(); 
     } 
     catch (Exception ex) 
     { 
      Response.Write(ex.Message.ToString()); 
     } 
     finally 
     { 
      con.Close(); 
     }   

    } 
+0

Я пробовал то, что вы сказали, даже добавил MessageBox, чтобы показать сообщение «нет», если он не сможет выполнить запрос (catch {MessageBox.show («no»);} ... Он показывает «нет» .... –

+0

Я отредактировал код, не могли бы вы проверить его ok –

+0

Не могли бы вы объяснить, почему вы хотите сделать этот код, просто привязывая значения таблиц к gridview, а затем вставляя одинаковые данные в одну и ту же таблицу не имеют никакого смысла. вы можете сделать простое кодирование. Для ссылок: http://www.c-sharpcorner.com/uploadfile/raj1979/select-add-update-and- delete-data-in-a-Asp-Net-gridview-control/ –

0

По сути ваши недостающие два ключевых конструкции:

  • 1, добавить параметры
  • 2, Выполнить запрос

Ваш код отредактирован:

private void insertBttn_Click(object sender, EventArgs e) 
    { 
     SqlConnection con = new SqlConnection(@"Data Source=NUC\MICROGARDE;Initial Catalog=SQL;Integrated Security=True"); 

     int i = 0; 
     con.Open(); 
     for (i = 0; i < this.dataGridView1.Rows.Count; i++) 
     { 
      string query = "insert into " + comboBox1.SelectedValue.ToString() + " (@" + dataGridView1.Columns[i] + ") VALUES ('" + this.dataGridView1.Columns[i] + "');"; 
      SqlCommand cmd = new SqlCommand(query, con); 
      cmd.Parameters.Add(new SqlParameter(@Field, "value")); 
      cmd.Parameters.Add(new SqlParameter(@Field, "value")); 
      cmd.ExecuteNonQuery(); 
     } 
     con.Close(); 
    } 

Использование параметров также отпугивает инъекции SQL.

+0

Опять же, я получаю эту ошибку: Должен объявить скалярную переменную «@DataGridViewTextBoxColumn». –

+0

Не могли бы вы указать название своих полей и таблицы. Сначала вам нужно определить, правильны ли ваши результаты. Пробовали ли вы отладку (шаг за шагом)? –

+0

У меня много таблиц с разными именами и разными именами столбцов. Я получаю текущее имя таблицы в comboBox1.SelectedValue.ToString() (например, «Probe A») и имена столбцов в dataGridView1.Columns [i] –

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