0

这段 c# 代码只是不想更改服务器上的密码(出于某种目的,用户 ID 和密码显然是字符串,但这只是为了让它工作):

SqlConnection conn = new SqlConnection ("Data Source=ServerIP;Persist Security Info=False;User ID=UserID;Password=UserPW");
SqlCommand cmd = new SqlCommand ("ALTER LOGIN UserID WITH PASSWORD='NewPW' OLD_PASSWORD='UserPW'", conn);
cmd.CommandType = CommandType.Text;
conn.Open();
conn.Close();

使用与服务器管理工​​作室相同的命令更改密码ALTER LOGIN UserID WITH PASSWORD='NewPW' OLD_PASSWORD='UserPW'就像一个魅力,因此在命令行或/和该特定用户的权限内没有问题。我想我错过了 Sql Connection 行中的一些东西。已经尝试过以下组合:

Initial Catalog=master;
Initial Catalog=;
Integrated Security=SSPI;
Persist Security Info=True;

更改命令类型、使用ExecuteNonQuery();和许多其他东西,但似乎没有任何效果。

“谷歌”没有给出任何有价值的结果,希望我能在这里找到我的答案,感谢您提前抽出时间。

4

2 回答 2

1

尝试以下方法,对我来说是一种享受:

SqlConnection conn = new SqlConnection ("Data Source=ServerIP;Persist Security Info=False;User ID=UserID;Password=UserPW");
SqlCommand cmd = new SqlCommand ("ALTER LOGIN UserID WITH PASSWORD='NewPW' OLD_PASSWORD='UserPW'", conn);
cmd.CommandType = CommandType.Text;
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();

cmd.ExecuteNonQuery()打开连接后忘记放了。我刚刚对此进行了测试,它成功地更改了我本地数据库的密码。

于 2013-03-26T12:20:17.063 回答
1
string queryString = @"DECLARE @sql NVARCHAR(500)
               SET @sql = 'ALTER LOGIN ' + QuoteName(@loginName) + 
                    ' WITH PASSWORD= ' + QuoteName(@password, '''') 
               EXEC @sql ";

using (var connection = new SqlConnection(connectionString))
{
    var command = new SqlCommand(queryString, connection);
    command.Parameters.AddWithValue("@loginName", loginName);
    command.Parameters.AddWithValue("@password", password);

    connection.Open();
    command.ExecuteNonQuery()
}

更新

使用 DDL(数据定义语言)语句(作为 ALTER LOGIN),您不能直接使用参数。这就是我使用动态 SQL 的原因。

QuoteName将在 SQL 中正确引用,只需将任何 [ 字符(第一次调用)或 ' 字符(第二次调用)加倍。

于 2013-03-26T12:21:17.323 回答