由Datatable插入sql server数据库的双记录



我有一个DataTable,正在将记录插入SQL server数据库。我已经有了用户定义的表类型和存储过程,它运行良好。我的Datatable中的记录都被插入到了数据库中,但问题是,每当我单击"保存"按钮时,两条相同的记录都会被插入到我的数据库中。例如,我的数据表只包含一条记录

TRANSACTION ID | QTY | UNIT | ARTICLES | UNIT PRICE | AMOUNT
TR-001            2     CASE  PRODUCT-A    100.00     200.00

但是,当我单击SAVE按钮时,两条相同的记录将插入到我的sql server表中,如下所示:

TRANSACTION ID | QTY | UNIT | ARTICLES | UNIT PRICE | AMOUNT
TR-001            2     CASE  PRODUCT-A    100.00     200.00
TR-001            2     CASE  PRODUCT-A    100.00     200.00

我尝试过不同类型的for循环机制,比如for循环和for每个循环,但结果相同。那里出了什么问题?这是我的代码:

public DataTable GetDataTable()
{
dt_SalesInv.Columns.Add("TRANSACTION ID");
dt_SalesInv.Columns.Add("QTY");
dt_SalesInv.Columns.Add("UNIT");
dt_SalesInv.Columns.Add("ARTICLES");
dt_SalesInv.Columns.Add("UNIT PRICE");
dt_SalesInv.Columns.Add("AMOUNT");
DataRow drLocal = null;
foreach (DataGridViewRow dr in dgvSalesInv.Rows)
{
drLocal = dt_SalesInv.NewRow();
drLocal["TRANSACTION ID"] = dr.Cells["TRANSACTION ID"].Value;
drLocal["QTY"] = dr.Cells["QTY"].Value;
drLocal["UNIT"] = dr.Cells["UNIT"].Value;
drLocal["ARTICLES"] = dr.Cells["ARTICLES"].Value;
drLocal["UNIT PRICE"] = dr.Cells["UNIT PRICE"].Value;
drLocal["AMOUNT"] = dr.Cells["AMOUNT"].Value;
dt_SalesInv.Rows.Add(drLocal);
}
return dt_SalesInv;
}
public void Save_SalesInvoice()
{

try
{
//calling stored proc
SqlConnection connectionstring = connectionString.Getconnection();
SqlCommand comm = new SqlCommand("sp_Save_SalesInvoice_2", connectionstring);
comm.CommandType = CommandType.StoredProcedure;
GetDataTable();
comm.Parameters.AddWithValue("@data", dt_SalesInv);
comm.ExecuteNonQuery();

if (comm.ExecuteNonQuery() >= 1)
{
MessageBox.Show("New Sales Invoice has been added to the Database!", "Sub- 
Category", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Try Catch Error Message", MessageBoxButtons.OK, 
MessageBoxIcon.Error);
}
}

请帮忙。谢谢

您应该避免多次调用ExecuteNonQuery(),因为它会执行指令那么多次,而在这种情况下,这不是您所需要的。

您还可以考虑将主键或唯一键添加到数据表中,这样就可以避免错误的数据,以防发生不好的事情。

GetDataTable();
comm.Parameters.AddWithValue("@data", dt_SalesInv);
int rowsAffected = comm.ExecuteNonQuery();
if (rowsAffected >= 1)
{
MessageBox.Show("New Sales Invoice has been added to the Database!", "Sub-Category", MessageBoxButtons.OK, MessageBoxIcon.Information);
}

最新更新