我有一個使用數據綁定複選框列表的Web應用程序。我有一個更新存儲過程,我放在一個foreach循環中。如果選中了一個CheckboxList,則更新沒問題,但是如果我檢查了多個CheckboxList,則會拋出該連接爲打開錯誤。我嘗試了try{}catch{}finally{}
但它仍然給了我同樣的錯誤連接未關閉,連接的當前狀態爲foreach循環中的打開錯誤
CultureInfo provider = CultureInfo.InvariantCulture;
System.Globalization.DateTimeStyles style = DateTimeStyles.None;
DateTime dt;
DateTime.TryParseExact(datepicker.Text, "mmddy", provider, style, out dt);
int i = Int32.Parse(amount.Text);
SqlConnection conn = new SqlConnection(GetConnectionString());
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
foreach (ListItem item in CheckBoxList1.Items)
{
if(item.Selected)
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "[dbo].[AccountCode_Update]";
cmd.Parameters.AddWithValue("@Batch_Num", SqlDbType.Int).Value = i;
cmd.Parameters.AddWithValue("@Batch_Date", SqlDbType.DateTime).Value = dt;
cmd.Parameters.AddWithValue("@Account_Code", SqlDbType.VarChar).Value = BatchCodeList.SelectedValue;
conn.Open();
cmd.ExecuteNonQuery();
}
}
conn.Close();
SQL
CREATE TABLE AccountTable
(
RowID int IDENTITY(1, 1),
AccountID varchar(2),
AccountName varchar(50),
SeqNum int,
SeqDate datetime
)
CREATE PROCEDURE [AccountCode_Update]
(
@Batch_Num int,
@Batch_Date datetime,
@Account_Code varchar(2)
)
AS
SET NOCOUNT ON
BEGIN
UPDATE AccountTable
SET SeqNum = @Batch_Num, SeqDate = @Batch_Date
WHERE AccountID = @Account_Account_Code
END
該錯誤的描述性很好。您無法打開打開的連接。您正在循環中打開您的連接,但不會在循環中關閉它。在聲明/初始化之後立即將open打開,你應該很好。此外,用塊代替你的SqlCommand和SqlConnection,而不是使用離散的Close調用。 –