Visual Studio服务器资源管理器连接到数据库,但在代码中引发异常

本文关键字:代码 异常 服务器 Studio 资源管理器 连接 数据库 Visual | 更新日期: 2023-09-27 18:25:43

我有一个非常特殊的问题。在VS2010服务器资源管理器中,我可以连接到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>

同样,服务器资源管理器可以连接到服务器并执行存储过程,但我的代码不断抛出相同的Exception。是什么原因造成的?

谢谢

编辑
为了清楚起见:服务器资源管理器可以使用我的代码使用的相同连接字符串连接和执行存储过程。然而,我的代码抛出了一个异常。

Visual Studio服务器资源管理器连接到数据库,但在代码中引发异常

存储过程是否调用xp_cmdshell?

如果是,请参阅:

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

当非sysadmin固定成员的用户调用它时服务器角色,xp_cmdshell使用帐户名连接到Windows和存储在名为的凭据中的密码xp_cmdshell_proxy_account。如果此代理凭据不存在,xp_cmdshell将失败。

代理帐户凭据可以通过执行sp_xp_cmdshell_proxy_account。作为参数,此存储过程采用Windows用户名和密码。例如,以下命令为Windows域用户创建代理凭据发货''具有Windows密码sdfh%dkc93vcMt0的KobeR。

您是否可以调试并确认web.config中的conunction字符串实际上正在加载到connString变量中?

而且,这个Data Source=db2.myapp.com,49178'hosting看起来很奇怪。我看到服务器,端口,但什么是主机?

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