0

私は非常に独特な問題を抱えています。VS2010 Server Explorer では、SQL Server に接続してストアド プロシージャを問題なく実行できます。ただし、コードでこれを実行しようとすると、例外がスローされます。

xp_cmdshell プロキシ アカウント情報を取得できないか、無効です。「##xp_cmdshell_proxy_account##」資格情報が存在し、有効な情報が含まれていることを確認してください。

コードで間違った資格情報を使用した可能性がありますが、サーバー エクスプローラーから接続文字列をコピーし、構成ファイルの接続文字列に入れました。それでも、同じエラー。

ストアド プロシージャの接続と呼び出しを行うコードを次に示します。

public static DataSet callStoredProcedure(string procedure, params SqlParameter[] args)
{
    SqlDataAdapter adapter = new SqlDataAdapter();
    DataSet dataSet = new DataSet();

    string connString = ConfigurationManager.ConnectionStrings["App"].ConnectionString;

    try
    {
        using (SqlConnection conn = new SqlConnection(connString))
        using (SqlCommand command = conn.CreateCommand())
        {
            conn.Open();
            if (args != null)
            {
                foreach (SqlParameter param in args) command.Parameters.Add(param);
            }
            command.CommandText = procedure;
            command.CommandType = CommandType.StoredProcedure;

            adapter.SelectCommand = command;
            adapter.Fill(dataSet, "tabela");
        }
    }
    catch (SqlException exception)
    {
        throw new Exception("SqlClient exception", exception);
    }

    return dataSet;
}

サーバー エクスプローラーが使用する接続文字列からコピーされた、接続文字列に関連する構成 XML を次に示します。

  <connectionStrings>
    <add name="App" connectionString="Data Source=db2.myapp.com,49178\hosting;Initial Catalog=app;User ID=appuser;Password=f00barbaz" providerName="System.Data.SqlClient" />
  </connectionStrings>

繰り返しますが、サーバー エクスプローラーはサーバーに接続してストアド プロシージャを実行できますが、私のコードは常に同じ例外をスローします。何が原因でしょうか?

ありがとうございました

編集
明確にするために: サーバー エクスプローラー、私のコードが使用するのと同じ接続文字列を使用して、ストアド プロシージャに接続して実行することができます。しかし、私のコードは例外をスローします。

4

2 に答える 2

1

あなたの sproc は xp_cmdshell を呼び出しますか?

その場合は、次を参照してください。

http://msdn.microsoft.com/en-us/library/ms175046.aspx

sysadmin 固定サーバー ロールのメンバーではないユーザーによって呼び出されると、xp_cmdshell は、xp_cmdshell_proxy_account という資格情報に格納されているアカウント名とパスワードを使用して Windows に接続します。このプロキシ資格情報が存在しない場合、xp_cmdshell は失敗します。

プロキシ アカウントの資格情報は、sp_xp_cmdshell_proxy_account を実行して作成できます。このストアド プロシージャは、Windows のユーザー名とパスワードを引数として受け取ります。たとえば、次のコマンドは、Windows パスワード sdfh%dkc93vcMt0 を持つ Windows ドメイン ユーザー SHIPPING\KobeR のプロキシ資格情報を作成します。

于 2012-02-25T20:21:34.320 に答える
0

web.config からの接続文字列が実際に connString 変数にロードされていることをデバッグして確認できますか?

また、これData Source=db2.myapp.com,49178\hostingは奇妙に見えます。サーバー、ポートが表示されますが、ホスティングとは何ですか?

Initial Catalog=app is app the name of your DB?
于 2012-02-25T20:19:14.613 に答える