请教问题,我写的保存按钮的代码事件,如下,若是导入,导入表格的数据,点保存后,将导入结果保存到数据库;
反之就是修改,保存后,保存修改结果到数据库,但像如下我的代码这样,若是先导入,点保存后,再修改,就成了反复一遍遍的导入了,而到不了下面的修改语句中了,请问怎么解决;
```c#
if (this.comboBox1.SelectedIndex == 1)
{
conn = new SqlConnection("server=192.168.100.247;database=Whmesinfo;user=sa;password=whyy@2021");
conn.Open();
try
{
if (log == true)
{
System.Data.DataTable dt = new System.Data.DataTable();
System.Data.DataTable dtTemp = dtTempImport; //导入的模板
for (int i = 0; i < dtTemp.Rows.Count; i++)
{
if (i == 0)
continue;
string strsql = @"INSERT INTO [dbo].[w_Qctablew]
([sampledate],[reportdate],[productname],[batchNo],[reportNo],[process],[AIT],[MOULD],[ECO],[GNB],[SE],[result],[note])
values
(@sampledate,@reportdate, @productname, @batchNo, @reportNo, @process, @AIT, @MOULD, @ECO, @GNB, @SE,@result, @note)";
SqlCommand comm = new SqlCommand(strsql, conn);
comm.Parameters.AddWithValue("@sampledate", dtTemp.Rows[i]["F1"]);
comm.Parameters.AddWithValue("@reportdate", dtTemp.Rows[i]["F2"]);
comm.Parameters.AddWithValue("@productname", dtTemp.Rows[i]["F3"]);
comm.Parameters.AddWithValue("@batchNo", dtTemp.Rows[i]["F4"]);
comm.Parameters.AddWithValue("@reportNo", dtTemp.Rows[i]["F5"]);
comm.Parameters.AddWithValue("@process", dtTemp.Rows[i]["F6"]);
comm.Parameters.AddWithValue("@AIT", dtTemp.Rows[i]["F7"]);
comm.Parameters.AddWithValue("@MOULD", dtTemp.Rows[i]["F8"]);
comm.Parameters.AddWithValue("@ECO", dtTemp.Rows[i]["F9"]);
comm.Parameters.AddWithValue("@GNB", dtTemp.Rows[i]["F10"]);
comm.Parameters.AddWithValue("@SE", dtTemp.Rows[i]["F11"]);
comm.Parameters.AddWithValue("@result", dtTemp.Rows[i]["F12"]);
comm.Parameters.AddWithValue("@note", dtTemp.Rows[i]["F13"]);
comm.ExecuteNonQuery();
SqlCommand cmd = new SqlCommand(SqlString, conn);
SqlDataAdapter sda = new SqlDataAdapter(cmd);
}
MessageBox.Show("导入成功");
}
if (log == false)
{
DataTable changedt = dt.GetChanges(); //将发生变化的内容,存储在另一个表内;
foreach (DataRow dr in changedt.Rows)
{
string strsql = string.Empty;
if (dr.RowState == System.Data.DataRowState.Modified)//修改操作
{
strsql = @"UPDATE [dbo].[w_Qctablew]
SET [sampledate] = '" + Convert.ToDateTime(dr["sampledate"]) + @"'
,[reportdate] = '" + Convert.ToDateTime(dr["reportdate"]) + @"'
,[productname] = '" + dr["productname"].ToString() + @"'
,[batchNo] = '" + dr["batchNo"].ToString() + @"'
,[reportNo] = '" + dr["reportNo"].ToString() + @"'
,[process] = '" + dr["process"].ToString() + @"'
,[AIT] = '" + dr["AIT"].ToString() + @"'
,[MOULD] = '" + dr["MOULD"].ToString() + @"'
,[ECO] = '" + dr["ECO"].ToString() + @"'
,[GNB] = '" + dr["GNB"].ToString() + @"'
,[SE] = '" + dr["SE"].ToString() + @"'
,[result] = '" + dr["result"].ToString() + @"'
,[note] = '" + dr["note"].ToString() + @"'
where id = '" + dr["id"].ToString() + "'";
}
else if (dr.RowState == System.Data.DataRowState.Added)//增加操作
{
strsql = @"INSERT INTO [dbo].[w_Qctablew]
([sampledate],[reportdate],[productname],[batchNo],[reportNo],[process],[AIT],[MOULD],[ECO],[GNB],[SE],[result],[note])
values
('" + Convert.ToDateTime(dr["sampledate"].ToString()) + @"'
,'" + Convert.ToDateTime(dr["reportdate"].ToString()) + @"'
,'" + dr["productname"].ToString() + @"'
,'" + dr["batchNo"].ToString() + @"'
,'" + dr["reportNo"].ToString() + @"'
,'" + dr["process"].ToString() + @"'
,'" + dr["AIT"].ToString() + @"'
,'" + dr["MOULD"].ToString() + @"'
,'" + dr["ECO"].ToString() + @"'
,'" + dr["GNB"].ToString() + @"'
,'" + dr["SE"].ToString() + @"'
,'" + dr["result"].ToString() + @"'
,'" + dr["note"].ToString() + @"')";
}
SqlCommand comm = new SqlCommand(strsql, conn);
comm.ExecuteNonQuery();
}
MessageBox.Show("更新成功");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
MessageBox.Show("请输入修改内容后,再点保存");
}
finally
{
conn.Close();
}
}
```
你的代码逻辑有问题,导致了你所描述的问题。你需要在导入和修改的操作之间加入逻辑判断,以避免多次导入的问题。
具体来说,你可以在导入操作之后设置一个变量,表示已经进行了导入操作。然后在保存操作之前,判断这个变量的值,如果已经进行了导入操作,就执行修改操作,否则提示用户进行导入操作。
下面是一个示例代码,演示了如何根据导入和修改的状态来执行保存操作:
if (this.comboBox1.SelectedIndex == 1)
{
// 若已经进行了导入操作,则执行修改操作
if (log == true)
{
// 执行修改操作的代码...
MessageBox.Show("修改成功");
}
// 否则提示用户进行导入操作
else
{
MessageBox.Show("请先导入数据");
return;
}
}
else
{
// 执行导入操作的代码...
MessageBox.Show("导入成功");
}
在上面的示例代码中,我们首先判断当前操作是导入还是修改,如果是导入,就判断是否已经进行了导入操作,如果已经进行了导入操作,则执行修改操作;否则提示用户进行导入操作。如果当前操作是修改,则直接执行修改操作。
需要注意的是,上面的代码仅是示例,你需要根据你的实际情况进行修改。