我的表格最多允许 10 个联系人。我使用变量来查找字段 contactName、contactEmail、contactType,然后检查是否输入了值并通过存储过程插入。我遇到的问题是,如果我输入两个名字,它会插入两次。如果我输入三个名字,它会插入全部三个、三次等等。我做错了什么?
注意:输入的所有联系人的 ID、有效日期和活动都相同。
using (SqlConnection sqlConnection = new SqlConnection(connectionString))
{
sqlConnection.Open();
using (SqlCommand sqlCommand3 = new SqlCommand())
{
for (int i = 1; (i <= contactCount && i <= 10); i++)
{
_contactNameTextBox = FindControl("ContactName" + i + "TextBox") as TextBox;
_contactEmailTextBox = FindControl("ContactEmail" + i + "TextBox") as TextBox;
_contactTypeDropDownList = (FindControl("ContactType" + i + "DropDown") as DropDownList);
if (_contactTypeDropDownList.SelectedValue != "")
{
sqlCommand3.CommandText = "usp_ContactsUpdate";
sqlCommand3.CommandType = CommandType.StoredProcedure;
sqlCommand3.Connection = sqlConnection;
sqlCommand3.Parameters.AddWithValue("ID", id);
sqlCommand3.Parameters.AddWithValue("EffectiveDate", effectiveDate);
sqlCommand3.Parameters.AddWithValue("Activity", "Add");
sqlCommand3.Parameters.AddWithValue("ContactName", _contactNameTextBox.Text.Trim());
sqlCommand3.Parameters.AddWithValue("ContactEmail", _contactEmailTextBox.Text.Trim());
sqlCommand3.Parameters.AddWithValue("ContactType", _contactTypeDropDownList.SelectedValue);
sqlCommand3.ExecuteNonQuery();
sqlCommand3.Parameters.Clear();
}
}
Label1.Text = "Done";
}
}
编辑:这里是 usp_ContactsUpdate
@ID int,
@EffectiveDate date,
@Activity nvarchar(10),
@ContactType nvarchar(10),
@ContactName nvarchar(75),
@ContactEmail nvarchar (75)
AS
BEGIN
INSERT INTO Contacts_Pending (ID, EffectiveDate, Activity, ContactType, ContactName, ContactEmail)
VALUES
(@ID, @EffectiveDate, @Activity, @ContactType, @ContactName, @ContactEmail)
END
存储过程中没有任何内容表明它将一次插入多个项目。循环中没有任何内容表明它会使用相同的参数更频繁地运行。
因此,错误要么是
contactCount
不是您想象的那样,要么是您显示的整个 C# 代码块被重复调用。例如,它可能是从多次触发的事件处理程序中调用的,也可能是在另一个运行多次的循环中。
附加调试器,例如在
sqlConnection.Open()
上设置断点,并检查 contactCount
的值是否符合您的期望。如果是这种情况,还要检查断点被击中的频率...如果一切按预期工作,则应该只被击中一次...