For 循环错误地插入重复值

问题描述 投票:0回答:1

我的表格最多允许 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
c# asp.net sqlconnection
1个回答
0
投票

存储过程中没有任何内容表明它将一次插入多个项目。循环中没有任何内容表明它会使用相同的参数更频繁地运行。

因此,错误要么是

contactCount
不是您想象的那样,要么是您显示的整个 C# 代码块被重复调用。例如,它可能是从多次触发的事件处理程序中调用的,也可能是在另一个运行多次的循环中。

附加调试器,例如在

sqlConnection.Open()
上设置断点,并检查
contactCount
的值是否符合您的期望。如果是这种情况,还要检查断点被击中的频率...如果一切按预期工作,则应该只被击中一次...

© www.soinside.com 2019 - 2024. All rights reserved.