更改 SqlConnection,Credentials 属性

DCr*_*z22 2 c# sqlconnection

所以我有一个登录页面,我必须实现一个验证:'如果用户是“sa”,那么它应该使用该用户凭据连接到数据库',这意味着我必须修改我的SqlConnection对象的凭据:

        if(username.Equals("sa", StringComparison.OrdinalIgnoreCase))
        {
            var securePassword = new System.Security.SecureString();
            foreach(char character in password)
            {
                securePassword.AppendChar(character);
            }

            securePassword.MakeReadOnly();
            var credentials = new SqlCredential(username, securePassword);
            sqlConn.Close();
            sqlConn.Credential = credentials;

            sqlConn.Open();

            return true;
        }
Run Code Online (Sandbox Code Playgroud)

但是我得到了一个例外,sqlConn.Credential = credentials;即使该财产不是readonly

InvalidOperationException:不能将凭据与用户 ID、UID、密码或 PWD 连接字符串关键字一起使用。

有没有其他方法可以更改Credentials属性?

提前致谢。

kir*_*dge 5

SqlConnection.Credential 属性

来自https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.credential(v=vs.110).aspx

将引发 InvalidOperationException 异常:

  • 如果在打开的连接上设置了凭据。
  • 如果在 Context Connection=true 时设置了 Credential。
  • 如果在 Integrated Security = true 时设置了 Credential。
  • 如果连接字符串使用密码时设置了 Credential。
  • 如果连接字符串使用 UserID 时设置了 Credential。


Mik*_*ela 5

或者你可以使用SqlConnectionStringBuilder

string connectString = "Data source=.;initial catalog=yourDB; 
                        User Id=user; Password=password";
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder (connectString);
SqlConnection sqlConn= new SqlConnection(builder.ConnectionString);
Run Code Online (Sandbox Code Playgroud)

然后在你的方法中,

 builder.Remove("User Id");
 builder.Remove("Password");
 // builder.Remove("integrated security"); if you had used
 sqlConn.ConnectionString = builder.ConnectionString;
Run Code Online (Sandbox Code Playgroud)