2017-03-23 24 views
1

ユーザーがSQL Serverのテーブル内に存在するかどうかを確認しようとしています。私は、接続をオープンし、接続文字列を作成している -ExecuteScalar SQLException:スカラー変数が宣言されていません

  var settings = ConfigurationManager.ConnectionStrings["BlogEngine"].ConnectionString; 
      SqlConnection conn = new SqlConnection(settings); 
      using (conn) 
      { 
       if (conn.State != ConnectionState.Open) 
       { 
        conn.Open(); 
        var checkUser = "SELECT COUNT(*) FROM dbo.be_Users WHERE UserName = @UserName"; 
        using (SqlCommand userquery = new SqlCommand(checkUser,conn)) 
        { 
         var parma = userquery.Parameters; 
         parma.AddWithValue("@UserName", activedirectory.DisplayName); 
         int UserExist = (int)userquery.ExecuteScalar(); 

         if (UserExist > 0) 
         { 
          //Username exist 
          AuthenticateUser(staffId, password, rmb); 
         } 
         else 
         { 
          //Username doesn't exist. 
          var sqlQuery = "INSERT INTO dbo.be_Users (BlogID, UserName, Password, LastLoginTime, EmailAddress, Department)" + "VALUES (@BlogID, @UserName, @Password, @LastLoginTime, @EmailAddress, @Department)"; 
          using (SqlCommand qe = new SqlCommand(sqlQuery)) 
          { 

           var parms = qe.Parameters; 
           parms.AddWithValue("@BlogID", Blog.CurrentInstance.Id.ToString()); 
           parms.AddWithValue("@UserName", activedirectory.DisplayName); 
           parms.AddWithValue("@Password", (passwordFormat == MembershipPasswordFormat.Hashed ? Utils.HashPassword(DEFAULT_PASSWORD) : DEFAULT_PASSWORD)); 
           parms.AddWithValue("@LastLoginTime", DateTime.Now); 
           parms.AddWithValue("@EmailAddress", DEFAULT_EMAIL); 
           parms.AddWithValue("@Department", activedirectory.department); 

           qe.ExecuteNonQuery(); 
          } 
          AuthenticateUser(staffId, password, rmb); 
         } 
        }conn.Close(); 
       } 

を、私はこのエラーになっておく - タイプの例外を「System.Data.SqlClient.SqlException」のSystem.Data.dllで発生したが、ユーザーコードで処理されませんでした

追加情報:スカラー変数 "@UserName"を宣言する必要があります。

例外は、​​行で発生します。

どうすれば解決できますか?

parma.AddWithValue("@UserName", activedirectory.DisplayName); 

私の推測では、activedirectory.DisplayNamenullであることを次のようになります。

答えて

0

は、あなたが持っているのではここパラメータを追加しました。 ADO.NETの不思議な不具合は、nullの値がのパラメータがに渡されないということです。 nullをデータベースに渡すには、DBNull.Valueを渡す必要があります。だから、:

parma.AddWithValue("@UserName", ((object)activedirectory.DisplayName) ?? DBNull.Value); 

以上の手書き:しかし

object displayName = activedirectory.DisplayName; 
if(displayName == null) { displayName = DBNull.Value; } 
parma.AddWithValue("@UserName", displayName); 

!これは質問を招待します:となります。表示名がnullの場合、このコードはどうなりますか?表示されたSQLクエリは、予期した方法では動作しません。

0

こんにちは、あなたは下のようにコードを変更してくださいすることができます

var parma = new SqlParameter("@UserName",activedirectory.DisplayName); 
       userquery.Parameters.Add(parma); 
+0

ええと...なぜ?理由はありますか?特に、その質問に関連する理由はありますか?私はその質問が報告した問題に何らかの変化をもたらすためにその変化を期待していません**。 –

関連する問題