我想在SQL Server中导入数据网格,但我不想复制数据

时间:2017-08-08 08:23:56

标签: c# sql-server visual-studio

如果我有大量数据(100000多行)并且在向表中添加更多数据时不想复制数据,那么使用的语法是正确的?

这是我的插入数据按钮的样子:

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.");
    }
}

任何帮助将不胜感激......

谢谢...

1 个答案:

答案 0 :(得分:0)

如果您选择在数据库端解决它,只需将唯一约束添加到其评论中提到的apomene的唯一行。

对于软件方面,有太多的解决方案,例如使用DataTable.GetChanges来获取添加和编辑的行,或者(如果您只是让用户添加行不能编辑),您可以保留旧行count然后在你的for语句中使用它,如:

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

编辑:出于安全原因(也更容易),我强烈建议您为您的查询使用String.Format方法,请使用{{ 3}}

编辑2:感谢评论帕特里克我错过了#34;不是&#34;字。