2017-08-08 89 views
1

如果我有很多數據(100000+行)並且我不想複製數據,那麼使用的語法是什麼?當我將更多數據添加到表格中時?我想在SQL Server中導入數據網格,但我不想複製數據

這是我插入數據按鈕的樣子:

private void button8_Click(object sender, EventArgs e) 
{ 
    string constring = @"DELETED FOR SECURITY REASONS"; 

    using (SqlConnection con = new SqlConnection(constring)) 
    { 
     for (int i = 0; i < dgvEmployees.Rows.Count - 1; i++) 
     { 
      var str = @"INSERT INTO USERSTable VALUES ('" + 
       dgvEmployees.Rows[i].Cells["Issuer"].Value + "', '" + 
       dgvEmployees.Rows[i].Cells["Customer"].Value + "'," + 
       dgvEmployees.Rows[i].Cells["Card"].Value + ",'" + 
       dgvEmployees.Rows[i].Cells["License plate No"].Value + 
       dgvEmployees.Rows[i].Cells["Transactiondate"].Value + "', '" +     dgvEmployees.Rows[i].Cells["Product description (com.)"].Value + "', '" + 
       dgvEmployees.Rows[i].Cells["Quantity"].Value + "', '" + 
       dgvEmployees.Rows[i].Cells["Gross CC"].Value + "', '" + 
       dgvEmployees.Rows[i].Cells["VAT1"].Value + "', '" + 
       dgvEmployees.Rows[i].Cells["Voucher"].Value + "', '" + 
       dgvEmployees.Rows[i].Cells["Mileage"].Value + "', '" + 
       dgvEmployees.Rows[i].Cells["Additional info"].Value + "', '" +     dgvEmployees.Rows[i].Cells["Supply country"].Value + "', '" +     dgvEmployees.Rows[i].Cells["Site Town"].Value + "', '" + 
       dgvEmployees.Rows[i].Cells["Product DEL"].Value + "', '" + 
       dgvEmployees.Rows[i].Cells["Unitprice"].Value + "', '" + 
       dgvEmployees.Rows[i].Cells["Amount"].Value + "', '" + 
       dgvEmployees.Rows[i].Cells["Discount"].Value + "', '" + 
       dgvEmployees.Rows[i].Cells["Surcharge"].Value + "', '" + 
       dgvEmployees.Rows[i].Cells["VAT"].Value + "', '" + 
       dgvEmployees.Rows[i].Cells["Suppliercurrency"].Value + "', '" +    dgvEmployees.Rows[i].Cells["Invoice No"].Value + "', '" + 
       dgvEmployees.Rows[i].Cells["Invoice date"].Value + "', '" + 
       dgvEmployees.Rows[i].Cells["Invoiced?"].Value + "', '" + 
       dgvEmployees.Rows[i].Cells["Vat2010"].Value + "', '" + 
       dgvEmployees.Rows[i].Cells["State"].Value + "', '" + 
       dgvEmployees.Rows[i].Cells["Supplier"].Value + "', '" + 
       dgvEmployees.Rows[i].Cells["Cost 1"].Value + "', '" + 
       dgvEmployees.Rows[i].Cells["Cost 2"].Value + "', '" + 
       dgvEmployees.Rows[i].Cells["Reference No"].Value + "', '" + 
       dgvEmployees.Rows[i].Cells["Recordtype"].Value + "', '" + 
       dgvEmployees.Rows[i].Cells["Amount other"].Value + "', '" + 
       dgvEmployees.Rows[i].Cells["Is listprice ?"].Value + "', '" +     dgvEmployees.Rows[i].Cells["Date to"].Value + "', '" + 
       dgvEmployees.Rows[i].Cells["Final Trx."].Value + "', '" + 
       dgvEmployees.Rows[i].Cells["LPI"].Value + "', '" + "');"; 

      try 
      { 
       using (SqlCommand com = new SqlCommand(str, con)) 
       { 
        con.Open(); 
        com.ExecuteNonQuery(); 
       } 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 

      con.Close(); 
     } 

     MessageBox.Show("Records uploaded."); 
    } 
} 

任何幫助將不勝感激...

謝謝...

+0

你的問題只是不可讀... – mauro

+0

在數據庫端處理它。添加一個唯一的約束 – apomene

+2

[SQL注入警報](http://msdn.microsoft.com/en-us/library/ms161953%28v=sql.105%29.aspx) - 你應該**永遠**永遠**連接在一起你的SQL語句是這樣的; **總是**使用**參數化查詢**,而不是避免SQL注入 - 檢查[小Bobby表](https://xkcd.com/327/) –

回答

0

如果您的choise解決它的數據庫只是在他的評論中提到的一個獨特的行列中添加了獨特的約束。

對於軟件方面也有像使用DataTable.GetChanges得到補充和修改行或(如果你只是讓用戶添加行不編輯),你可以保留舊的行數,然後用它在你的說法太多的解決方案像:

for (int i = oldRowsCount-1; i < dgvEmployees.Rows.Count - 1; i++) 

編輯:出於安全原因(也更容易),我強烈reccomend你使用的String.Format方法爲您查詢,使用SqlParameterCollection.AddWithValue

編輯2:感謝評論帕特里克我錯過了「不」字。

+0

*我強烈建議您爲您的查詢使用String.Format方法*>我希望您的意思是** NOT **使用'string.Format'。 –