例外が発生しています既に開いているデータリーダーがあります。このコマンドに関連付けられています。 Google私は、接続文字列でMARS = trueを使用しようとしましたが、USING内のすべてを保持しましたが、問題は解決しませんでした。 私は行内で例外を受け取ります cm.ExecuteNonQuery();コードの後半でこのコマンドに関連付けられている開いているデータリーダーが既にあります。最初に閉じる必要があります。例外
public void UpdateActionSchedule(string actionScheduleKey, string note, string PEOPLE_CODE_ID)
{
using (SqlConnection con = new SqlConnection("server=123; database=abc; user id=qwe; password=qwe;"))
{
con.Open();
if (note == "" || note == null)
{
string UPDATE_COMPLETE = String.Format("UPDATE ACTIONSCHEDULE SET EXECUTION_DATE = '" + DateTime.Now + "', COMPLETED = 'Y', REVISION_OPID='WFLOW' where UNIQUE_KEY = '" + actionScheduleKey + "' and people_org_code_id='" + PEOPLE_CODE_ID + "'");
SqlCommand cd = new SqlCommand(UPDATE_COMPLETE, con);
cd.ExecuteNonQuery();
cd.Dispose();
}
else
{
string oriNote = "";
string GET_NOTE = String.Format("SELECT NOTE FROM ACTIONSCHEDULE WHERE people_org_code_id='{0}' and UNIQUE_KEY='{1}'", PEOPLE_CODE_ID, actionScheduleKey);
using (SqlCommand cmd = new SqlCommand(GET_NOTE, con))
{
// SqlDataReader dr = cmd.ExecuteReader();
using (SqlDataReader dr = cmd.ExecuteReader())
{
if (dr.HasRows)
{
while (dr.Read())
{
oriNote = dr["NOTE"].ToString();
}
note = oriNote + " " + note;
}
//string UPDATE = String.Format("UPDATE ACTIONSCHEDULE SET Note = '" + note + "' where UNIQUE_KEY = '" + actionScheduleKey + "' and people_org_code_id='" + PEOPLE_CODE_ID + "'");
//SqlCommand cm = new SqlCommand(UPDATE, con);
//cm.ExecuteNonQuery();
//cm.Dispose();
string UPDATE_COMPLETE = String.Format("UPDATE ACTIONSCHEDULE SET EXECUTION_DATE = '" + DateTime.Now + "',Note = '" + note + "', COMPLETED = 'Y', REVISION_OPID='WFLOW' where UNIQUE_KEY = '" + actionScheduleKey + "' and people_org_code_id='" + PEOPLE_CODE_ID + "'");
SqlCommand cmw = new SqlCommand(UPDATE_COMPLETE, con);
cmw.ExecuteNonQuery();
cmw.Dispose();
}
}
}
}
}
関連性がありません:文字列連結を実行する代わりにクエリをパラメータ化する必要があります。ここに[関連記事は](https://msdn.microsoft.com/en-us/library/ff648339.aspx) – MrZander
です。エラーは私には明らかです。最後の更新コマンドを発行する前に_dr.Close_を呼び出す必要があります。しかし、実際にSQLコマンドを書くあなたの方法は非常に危険です。パラメータを使ってできるだけ早く修正してください。 SQLインジェクションとは別に、あなたのフィールドNOTEに一重引用符が含まれているとどうなりますか? – Steve
また、Disposeを明示的に呼び出さずに、(var cmw = new SqlCommand(...))を使用してコードをラップします。 –