C# SQL Insert、Update无法查看现有记录,而是复制已建立的记录

C# SQL Insert、Update无法查看现有记录,而是复制已建立的记录,c#,asp.net,sql,sql-server,C#,Asp.net,Sql,Sql Server,我遇到了一个奇怪的情况,我正在检查从循环到html表行的数组中是否存在插入或更新记录。如果我填充第一条记录并将第二条记录留空,它将把它插入数据库,但不接受以后插入第二行,而是复制第一行记录。如果我先填第二排的话。如果我在开始处同时填充这两条记录,它将同时插入这两条记录,但对于以后的任何更改,它将无法识别未找到的第二条记录,并将复制第一条记录 代码如下: #region //if exist update else insert inserting code //Response.Write("&

我遇到了一个奇怪的情况,我正在检查从循环到html表行的数组中是否存在插入或更新记录。如果我填充第一条记录并将第二条记录留空,它将把它插入数据库,但不接受以后插入第二行,而是复制第一行记录。如果我先填第二排的话。如果我在开始处同时填充这两条记录,它将同时插入这两条记录,但对于以后的任何更改,它将无法识别未找到的第二条记录,并将复制第一条记录

代码如下:

#region //if exist update else insert inserting code
//Response.Write("<script>alert('InputDate = " + stringList2[6] + 
//" and Dept= " + stringList2[7] + " and DeptType= " + stringList2[8] + 
//" and DeptSubType= " + stringList2[9] + "')</script>");
con.Open();
//cmd = new SqlCommand("SELECT 1 FROM MainDailyData WHERE Dept= '" + stringList2[7] + 
//    "' and DeptType = '" + stringList2[8] + "' and DeptSubType= '" + stringList2[9] + "'", con);
cmd = new SqlCommand("SELECT 1 FROM MainDailyData WHERE Dept= @dpt and DeptType = @dptType and DeptSubType= @DptSbType", con);
cmd.Parameters.AddWithValue("@dpt", stringList2[7]);
cmd.Parameters.AddWithValue("@dptType", stringList2[8]);
cmd.Parameters.AddWithValue("@DptSbType", stringList2[9]);

bool fRecordExists = false;
SqlDataReader dr = cmd.ExecuteReader();
//SqlDataReader dr = cmd.ExecuteScalar();
if (dr != null && dr.HasRows)
{
fRecordExists = true;
}
dr.Close();
dr.Dispose();
if (fRecordExists)
{
Response.Write("<script>alert('Found,Update')</script>");
SqlDataAdapter myda = new SqlDataAdapter();
myda.UpdateCommand = new SqlCommand("UPDATE MainDailyData SET Product1 = @Prod1, Product2 = @Prod2, Product3 = @Prod3, Product4 = @Prod4, Product5 = @Prod5, Product6 = @Prod6, InputDate = @InDate, Dept = @Dpt, DeptType = @DptType, DeptSubType = @DptSubType", con);
myda.UpdateCommand.Parameters.Add("@Prod1", SqlDbType.VarChar).Value = stringList2[0];
myda.UpdateCommand.Parameters.Add("@Prod2", SqlDbType.VarChar).Value = stringList2[1];
myda.UpdateCommand.Parameters.Add("@Prod3", SqlDbType.VarChar).Value = stringList2[2];
myda.UpdateCommand.Parameters.Add("@Prod4", SqlDbType.VarChar).Value = stringList2[3];
myda.UpdateCommand.Parameters.Add("@Prod5", SqlDbType.VarChar).Value = stringList2[4];
myda.UpdateCommand.Parameters.Add("@Prod6", SqlDbType.VarChar).Value = stringList2[5];
myda.UpdateCommand.Parameters.Add("@InDate", SqlDbType.VarChar).Value = stringList2[6];
myda.UpdateCommand.Parameters.Add("@Dpt", SqlDbType.VarChar).Value = stringList2[7];
myda.UpdateCommand.Parameters.Add("@DptType", SqlDbType.VarChar).Value = stringList2[8];
myda.UpdateCommand.Parameters.Add("@DptSubType", SqlDbType.VarChar).Value = stringList2[9];
myda.UpdateCommand.ExecuteNonQuery();
}
else
{
Response.Write("<script>alert('not Found,Insert')</script>");
SqlDataAdapter myda = new SqlDataAdapter();
myda.InsertCommand = new SqlCommand("INSERT INTO MainDailyData (Product1,Product2,Product3,Product4,Product5,Product6,InputDate,Dept,DeptType,DeptSubType) VALUES(@Prod1,@Prod2,@Prod3,@Prod4,@Prod5,@Prod6,@InDate,@Dpt,@DptType,@DptSubType)", con);
myda.InsertCommand.Parameters.Add("@Prod1", SqlDbType.VarChar).Value = stringList2[0];
myda.InsertCommand.Parameters.Add("@Prod2", SqlDbType.VarChar).Value = stringList2[1];
myda.InsertCommand.Parameters.Add("@Prod3", SqlDbType.VarChar).Value = stringList2[2];
myda.InsertCommand.Parameters.Add("@Prod4", SqlDbType.VarChar).Value = stringList2[3];
myda.InsertCommand.Parameters.Add("@Prod5", SqlDbType.VarChar).Value = stringList2[4];
myda.InsertCommand.Parameters.Add("@Prod6", SqlDbType.VarChar).Value = stringList2[5];
myda.InsertCommand.Parameters.Add("@InDate", SqlDbType.VarChar).Value = stringList2[6];
myda.InsertCommand.Parameters.Add("@Dpt", SqlDbType.VarChar).Value = stringList2[7];
myda.InsertCommand.Parameters.Add("@DptType", SqlDbType.VarChar).Value = stringList2[8];
myda.InsertCommand.Parameters.Add("@DptSubType", SqlDbType.VarChar).Value = stringList2[9];
myda.InsertCommand.ExecuteNonQuery();
}
con.Close();
#endregion

我的道歉,如果这是一个重复线程,但我以前的问题是不同的,并解决了。谢谢。

在我看来,您的update命令忽略了Where子句,这很奇怪。这似乎是问题的原因,至少我没有在代码中看到其他明显的问题。如何确定要更新的行


此外,不需要随后调用DataReader.Dispose和DataReader.Close方法。DataReader.Dispose方法调用Close本身。

你真是太棒了,maaan.愚蠢的错误让我花了很多时间。再次感谢兄弟。