2017-03-23 108 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”。

在​​行处发生异常。

请问我该如何解决?

回答

0

既然你有添加一个参数在这里:

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

我的猜测是,activedirectory.DisplayNamenull。 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

嗯......为什么呢?有原因吗?特别是有没有与这个问题有关的原因?我会**不会**期望这种改变对问题中报告的问题产生任何影响。 –