【问题标题】:Can't connect to local SQL Server DB with connection string, but VS can无法使用连接字符串连接到本地 SQL Server DB,但 VS 可以
【发布时间】:2023-03-28 14:15:01
【问题描述】:

我正在尝试使用连接字符串通过 Visual Studio 15 连接到本地 Sql Server 2012 数据库实例。虽然我已经能够通过 Visual Studio SQL Server 对象资源管理器连接到数据库并成功运行测试过程,但我无法在我的项目中使用连接字符串这样做。

这是我的 SQL Server 对象资源管理器提供的连接字符串

<connectionStrings>    
  <add name="objConnLocal" 
connectionString="Data Source=DESKTOPIVO;Integrated Security=True;Initial Catalog=tnk;Connect Timeout=15;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False;"providerName="System.Data.SqlClient"/>
</connectionStrings>

这是我的代码,可以很好地使用 Azure 给定的连接字符串连接到 Azure DB(代码有效)

public class DbConn
{

public static string DatabaseConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["objConnLocal"].ConnectionString;
    public static SqlConnection objConn = new sqlConnection(DatabaseConnectionString);



public void spCMSSelectTest(out DataSet ds)
{
    ds = new DataSet("buttons");
    SqlDataAdapter objDataAdapter = new SqlDataAdapter();
    SqlCommand cmd = new SqlCommand("spCMSSelectTest", DbConn.objConn);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Connection.Open();
    objDataAdapter.SelectCommand = cmd;
    objDataAdapter.Fill(ds);
    cmd.Connection.Close();
}
}

这是我要连接的数据库:

这是我尝试访问的测试页面:

 protected void Page_Load(object sender, EventArgs e)
{
    DataSet ds;
    try
    { 
    dbc.spCMSSelectTest(out ds);

        lblTest.Text = ds.Tables[0].Rows.Count.ToString();
    }
    catch (Exception easd)
    {
        lblTest.Text = easd.ToString();
    }

}

我一直在这里和谷歌上寻找答案,但似乎没有什么对我有用。我错过了什么?

编辑: 有错误:

System.Data.SqlClient.SqlException (0x80131904): 用户登录失败 'IIS APPPOOL\DefaultAppPool'。在 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity 身份、SqlConnectionString 连接选项、SqlCredential 凭证、对象 providerInfo、字符串 newPassword、SecureString newSecurePassword、布尔重定向用户实例、SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool 池,字符串 accessToken,布尔值 applyTransientFaultHandling) 在 System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions 选项,DbConnectionPoolKey poolKey,对象 poolGroupProviderInfo, DbConnectionPool 池,DbConnection owningConnection, DbConnectionOptions 用户选项)在 System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool 池,DbConnection owningObject,DbConnectionOptions 选项, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions) 在 System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal 旧连接)在 System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal 旧连接)在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean 允许创建、布尔型仅OneCheckConnection、DbConnectionOptions userOptions,DbConnectionInternal& 连接)在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject,TaskCompletionSource1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource1 重试,DbConnectionOptions 用户选项、DbConnectionInternal oldConnection、DbConnectionInternal& 连接)在 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection 外部连接,DbConnectionFactory 连接工厂, 任务完成源1 retry, DbConnectionOptions userOptions) at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource1 重试)在 System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 重试)在 System.Data.SqlClient.SqlConnection.Open() 在 DbConn.spCMSSelectTest(DataSet&ds) 在 c:\inetpub\wwwroot\CMS\App_Code\DbConn.cs:第 22 行 index.Page_Load(Object sender, EventArgs e) in c:\inetpub\wwwroot\CMS\index2.aspx.cs:第 18 行 ClientConnectionId:d576fae4-db3d-451d-8436-2abe003c01f0 错误 编号:18456,状态:1,等级:14

【问题讨论】:

  • 连接时遇到什么错误?
  • 这听起来不像是 sql 连接问题,听起来像 iis 问题
  • 但你刚才说它没有错误....错误是什么
  • openConnection 是做什么的?我猜有些东西出错了 - 但你的代码没有报告它
  • 好了,您尝试使用受信任的连接登录,但它在默认池中运行,而不是作为用户名...显然无权登录 sql - 您需要以“您”或“sql 用户”身份登录

标签: c# sql-server visual-studio connection-string


【解决方案1】:

您以受信任的用户身份登录(默认)- 该用户是池用户 IIS APPPOOL\DefaultAppPool,您需要以您身份登录或 SQL 登录名。因为它在池中运行时使用的凭据与在桌面上运行时使用的凭据不同。

【讨论】:

    【解决方案2】:

    您缺少数据库。

    Initial Catalog=tnk 添加到您的连接字符串中。

    【讨论】:

    • 哦对了,忘了说,我试过了,还是不行。 tnkmaster 都试过了,因为我的数据库名称是 tnk。更新了我的问题以在其中包含目录。
    • 好的。你有错误吗?您是否尝试过运行您在 SSMS 中引用的存储过程以查看您得到的结果?还要将你的代码包装在一个 try-catch 中,看看如果抛出异常,你会得到什么细节。
    • 我没有收到错误,当我尝试访问仅调用上述过程的测试页面时,它只是将我返回到蓝色 iis 主屏幕。 openConnection(cmd) 失败;
    猜你喜欢
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 2019-02-07
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    相关资源
    最近更新 更多