2015-03-24 1 views
0

У меня есть вид сетки, что я заполняю его C#, а пользователь редактирует его, а затем я вставляю его в другую таблицу, когда я вставляю его, он принимает изменения, выполненные пользователем в первая строка и игнорировать все переменные в других строках. С3 Colum является столбцом пользователь редактироватьdatagridview вставить пустую строку из второй строки на словах

это DataGrid genration запрос

string output = "select distinct [C1],C2 as [Error_Name], '' as [C3], [C4],[C5] from rejection"; 
      SqlCommand cmd2 = new SqlCommand(); 
      cmd2.CommandType = CommandType.Text; 
      cmd2.CommandText = output; 
      cmd2.Connection = conne; 
      conne.Open(); 
      SqlDataAdapter dscmd = new SqlDataAdapter(output, strconnection); 
      DataSet ds = new DataSet(); 
      dscmd.Fill(ds); 
      dataGridView1.DataSource = ds.Tables[0]; 

это вставка запроса

 for (int i = 0; i < dataGridView1.Rows.Count; i++) 
     { 
      string StrQuery = @"INSERT INTO [test2] VALUES ('" + dataGridView1.Rows[i].Cells[0].Value + "', '" + dataGridView1.Rows[i].Cells[1].Value + "', '" + dataGridView1.Rows[i].Cells[2].Value + "', '" + dataGridView1.Rows[i].Cells[3].Value + "', '" + dataGridView1.Rows[i].Cells[4].Value + "');"; 


       SqlConnection conn = new SqlConnection(strconnection); 
       conn.Open(); 

       using (SqlCommand comm = new SqlCommand(StrQuery, conn)) 
       { 
        comm.ExecuteNonQuery(); 
       } 
       conn.Close(); 

Обратите внимание все строки будут вставлены в базу данных, но в первой строке есть только переменные прав, все остальные строки не имеют изменений в редакции, они одинаковы.

, когда я использую эту строку соединения:

string strconnection = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\ksa\Documents\Visual Studio 2012\Projects\test\test\test.mdf;Integrated Security=True"; 

это работает ...... но когда я использую app.sitting так его:

string strconnection = ConfigurationManager.ConnectionStrings["test"].ConnectionString; 

и в приложении заседание:

<connectionStrings> 
     <add name="test" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\test.mdf;Integrated Security=True" providerName="Microsoft.SqlServerCe.Client.4.0" /> 
    </connectionStrings> 

не работает !!

+0

Обязательный комментарий о [SQL Injection] (http://stackoverflow.com/q/332365/467172) , – Anthony

+0

что вы действительно хотите? –

+0

@ KhurramAli, что я хочу, это выбрать 3 столбца из таблицы, пользователь добавит 4-ю колонку вручную по строкам, затем он будет нажимать кнопку обновления, и воля будет вставлять все 3colums, включая отредактированный пользователем другой стол, что происходит сейчас обновление или изменения в первой строке только приходят в таблицу, а сброс те же, что и в первой таблице, игнорируя все сделанные с ними изменения. – KAS

ответ

0

Вы должны использовать Bulk Insert

SqlBulkCopy cm = new SqlBulkCopy(con); 
      cm.DestinationTableName = "test2"; 
      cm.ColumnMappings.Add("C1", "C1"); 
      cm.ColumnMappings.Add("C2", "C2"); 
      cm.ColumnMappings.Add("C3", "C3"); 
      cm.ColumnMappings.Add("C4", "C4"); 
      cm.ColumnMappings.Add("C5", "C5"); 
      try 
      { 
       cm.WriteToServer(dataGridView1.DataSource); 
       MessageBox.Show("Total Record Inserted"); 
      } 
      catch (Exception e) 
      { 
       MessageBox.Show(e.Message); 
      } 

Примечание: cm.ColumnMappings.Add(yourdatagridviewcolumnname,"yourcolumnnameindb");

+0

по-прежнему то же самое, только обновление в первой записи обновляется в базе данных все остальные обновления игнорируются – KAS

+0

также я получаю эту ошибку на беге: ошибка \t \t 13 Аргумент 1: не удается преобразовать из «объекта» до «» System.Data.IDataReader \t Error \t \t 12 лучших перегружен матч метода «системы .Data.SqlClient.SqlBulkCopy.WriteToServer (System.Data.IDataReader) 'имеет некоторые недопустимые аргументы – KAS

+0

@KAS вы пробовали код? –