0

このc#コードは、サーバー上のパスワードを変更したくないだけです(UserIDとPWは明らかに何らかの目的で文字列になりますが、これは単にそれを機能させるためです):

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

Server Management Studioで同じコマンドを使用してパスワードを変更するALTER LOGIN UserID WITH PASSWORD='NewPW' OLD_PASSWORD='UserPW'ことは魅力のように機能するため、この特定のユーザーのコマンドラインやアクセス許可に問題はありません。SQL接続行に何かが欠けていると思います。すでに試した組み合わせ:

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で適切な引用を行い、[文字(最初の呼び出し)または'文字(2番目の呼び出し)を2倍にするだけです

于 2013-03-26T12:21:17.323 に答える