2016-05-24 4 views
2

C#:ExcuteスカラーEROR

int lev; 
      SqlCommand getlev = new SqlCommand("SELECT level FROM [User] WHERE Username = @username"); 
      getlev.Parameters.AddWithValue("@username", txtuser.Text); 
      c.Open(); 
      lev = (int)getlev.ExecuteScalar(); 
      c.Close(); 
      lev++; 
      SqlCommand lvup= new SqlCommand("UPDATE [User] SET level = @lev WHERE Username = @username", c); 
      lvup.Parameters.AddWithValue("@lev",lev); 
      lvup.Parameters.AddWithValue("@username", txtuser.Text); 
      c.Open(); 
      lvup.ExecuteNonQuery(); 
      c.Close(); 

エラー:

ExecuteScalar: Connection property has not been initialized.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.InvalidOperationException: ExecuteScalar: Connection property has not been initialized.

+0

は、「c」の定義を示します。 – fubo

+2

エラーメッセージは自明です。 getlev SqlCommandオブジェクトにConnectionプロパティを設定します。 –

+0

Secondeのように最初の 'SqlCommand'に接続パラメータを追加することができます。また、' SqlCommande'を実行したい場合には接続を閉じてはいけません。 –

答えて

2

は、コマンドのための接続を提供していませんでした。 ExecuteScalar()を実行する前に、

getlev.Connection = c; 

を実行する前に使用してください。

または接続を取るコンストラクタのオーバーロードを使用します。あなたが最初のSqlCommandオブジェクトに接続引数を提供する必要が

SqlCommand getlev = new SqlCommand(
          "SELECT level FROM [User] WHERE Username = @username", 
          c); 
+0

ありがとうございました。 –

2

を:

SqlCommand getlev = new SqlCommand("SELECT level FROM [User] WHERE Username = @username", c); 

それが渡される前に、接続を閉じました2番目のSqlCommand:

c.Close(); // Remove this 
lev++; 
SqlCommand lvup= new SqlCommand("UPDATE [User] SET level = @lev WHERE Username = @username", c);