同じ文字列からIDを取得しようとして、複数のスレッドからこのメソッドを呼び出そうとしました。SqlDataReaderを作成する行で常にこの例外が発生します。
このコマンドに関連付けられている開いているDataReaderがすでにあり、最初に閉じる必要があります。
問題がどこにあるのかわかりません。lock()ステートメントを使用しているので、コマンドを1回だけ使用してから、それを破棄します。データベースプログラミングは初めてなので、エラーがどこにあるのかわかりません。
ありがとう!
public int UsernameGetID(string username)
{
using (var command = new SqlCommand("SELECT user_id FROM " + ServerConstants.Database.TableUserInformation + " WHERE username = @Username", connection))
{
lock (command)
{
SqlParameter param = new SqlParameter("@Username", SqlDbType.VarChar, username.Length);
param.Value = username;
command.Parameters.Add(param);
using (SqlDataReader reader = command.ExecuteReader())
{
if (reader.Read())
{
return (int)reader[0];
}
else
{
// username doesn't exists
return 0;
}
}
}
}
}