SQLは、あなたの
foreach
ループの前に、あなたの
conn.Open();
コールを移動
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();
私は
try{}catch{}finally{}
を試みたが、それはまだ私に同じエラーを与えています。何が起こっている
SqlConnection conn = new SqlConnection(GetConnectionString());
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
conn.Open();
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;
cmd.ExecuteNonQuery();
}
}
conn.Close();
は、あなたが既に開いていると、それはエラーをスローし、接続のconn.Open()
を呼び出しているということです。このため、最初のコールは機能し、次のコールは失敗します。
Open()
の方法については、MSDN documentationをご覧ください。例外を引き起こす原因のいくつかの例があります。
この場合
InvalidOperationExceptionが
は、データソースまたはサーバーを指定せずに接続を開くことができません。 または 接続は既に開いています。
エラーはかなり説明的です。開いている接続を開くことはできません。ループ内で接続を開いていますが、ループ内で閉じているわけではありません。宣言/初期化の直後に開いてください。さらに、SqlCommandとSqlConnectionは、個別のClose呼び出しを使用する代わりにブロックを使用してラップします。 –