2017-03-23 2 views
1

Ich versuche zu überprüfen, ob ein Benutzer in einer Tabelle in SQL-Server existiert. Ich habe Verbindungszeichenfolgen erstellt, um eine Verbindung geöffnet -ExecuteScalar SQLException: skalare Variable nicht deklariert

  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(); 
       } 

ich diesen Fehler erhalte - eine Ausnahme vom Typ ‚System.Data.SqlClient.SqlException‘ aufgetreten in System.Data.dll wurde aber nicht in Benutzercode behandelt

Zusätzliche Informationen: Muss die Skalarvariable "@UserName" deklarieren.

Die Ausnahme tritt bei der int UserExist = (int)userquery.ExecuteScalar(); Linie auf.

Bitte, wie kann ich das beheben?

Antwort

0

Da Sie haben hinzugefügt einen Parameter hier:

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

Meine Vermutung wäre, dass activedirectory.DisplayNamenull ist. Ein kurioser Fehler in ADO.NET ist, dass Parameter mit null Werte nicht übergeben werden. Um eine null in die Datenbank zu übergeben, müssen Sie DBNull.Value übergeben. Also:

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

oder mehr Langschrift:

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

jedoch! Das lädt dann die Frage ein: Was soll dieser Code tun, wenn der Anzeigename null ist? Die angezeigte SQL-Abfrage verhält sich nicht wie erwartet.

0

Hallo können Sie bitte Ihren Code unter

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

ähm ... warum? gibt es einen Grund? Gibt es insbesondere einen Grund, der mit der Frage zusammenhängt? Ich würde ** nicht ** erwarten, dass diese Änderung für das in der Frage gemeldete Problem einen Unterschied macht. –

Verwandte Themen