2016-12-04 7 views
1

Я хотел бы вставить данные из datagridview в базу данных, но этого не произошло. Первая кнопка импортирует данные из xls, а вторая кнопка должна вставить все данные в db не только одной записи. Как я могу это исправить?Вставить значение из datagridview в sql

private void button8_Click(object sender, EventArgs e) 
    { 
     string stringconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + textBox2.Text + ";Extended Properties=\"Excel 8.0;HDR=Yes;\";"; 
     OleDbConnection cons = new OleDbConnection(stringconn); 
     OleDbDataAdapter dat = new OleDbDataAdapter("Select * from [Sheet1$]", cons); 
     dat.Fill(dt); 

     dataGridView1.DataSource = dt; 
    } 

    private void button9_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      load(); 
      conn.Open(); 
      string col1 = dataGridView1[0, dataGridView1.CurrentCell.RowIndex].Value.ToString(); 
      string col2 = dataGridView1[1, dataGridView1.CurrentCell.RowIndex].Value.ToString(); 
      string col3 = dataGridView1[2, dataGridView1.CurrentCell.RowIndex].Value.ToString(); 

      string insert_sql = "INSERT INTO humans VALUES('" + col1 + "','" + col2 + "','" + col3 + "')"; 

      da = new NpgsqlDataAdapter(insert_sql, conn); 
      da.SelectCommand.ExecuteNonQuery(); 

      conn.Close(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 
+0

параметры использования SQL. Если DGV привязан к источнику данных (например, DataTable с использованием DataAdapter), вам не нужно ловить данные из DGV, как это. OleDBConnection кажется странным http://stackoverflow.com/q/22926961/1070452 – Plutonix

+0

Лично я хотел бы хранить источник данных DataGridView в DataTable, а затем использовать BulkInsert в вашей базе данных, указав таблицу назначения и учетные данные, конечно. Это намного проще, чем писать собственные SQL-запросы и вручную получать результаты всех столбцов вашего DataGridView. –

ответ

1

Может быть, проблема с типом данных, поскольку значения столбцов является строка , так что вы должны передать строковые значения, как следующие, попробуйте следующее:

string query = "Insert into [User].[dbo].[songsN1] (songsName,path) Values (@c1,@c2,c3)"; 
       command.Parameters.AddWithValue("@c1", col1); 
       command.Parameters.AddWithValue("@c2",col2); 
       command.Parameters.AddWithValue("@c3", col3);