Visual Studio Server Explorer подключается к базе данных, но в коде выдается исключение - PullRequest
0 голосов
/ 26 февраля 2012

У меня очень специфическая проблема.В 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>

Опять же, обозреватель сервера может подключиться к серверу и выполнить хранимую процедуру, но мой код постоянно выдает одно и то же исключение.Что может быть причиной этого?

Спасибо

РЕДАКТИРОВАТЬ
Чтобы было ясно: обозреватель сервера может подключаться и выполнять сохраненныепроцедуры с той же строкой подключения, что и мой код.И все же мой код вызывает исключение.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2012

Ваш sproc вызывает xp_cmdshell?

Если это так, см .:

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

Когда он вызывается пользователем, который не является членом фиксированного системного администратора роль сервера, xp_cmdshell подключается к Windows, используя имя учетной записи и пароль хранится в учетных данных с именем xp_cmdshell_proxy_account. Если эти учетные данные прокси не существуют, xp_cmdshell завершится ошибкой.

Учетные данные прокси-сервера можно создать, выполнив sp_xp_cmdshell_proxy_account. В качестве аргументов эта хранимая процедура принимает имя пользователя и пароль Windows. Например, следующее Команда создает учетные данные прокси для пользователя домена Windows SHIPPING \ KobeR с паролем Windows sdfh% dkc93vcMt0.

0 голосов
/ 26 февраля 2012

Можете ли вы отладить и подтвердить, что строка соединения из web.config действительно загружается в переменную connString?

также, этот Data Source=db2.myapp.com,49178\hosting выглядит странно. Я вижу сервер, порт, но что такое хостинг?

Initial Catalog=app is app the name of your DB?
...