【发布时间】:2021-11-07 14:26:27
【问题描述】:
我有一个 SSIS 包,它试图将 csv 文件中的信息加载到 SQL Server 表中。 DB 连接被定义为 ADO.NET 连接,我已经参数化了连接字符串。请参阅下面的屏幕截图。
下面是我在C#脚本任务中用来建立数据库连接的代码sn-p。
SqlConnection myADONETConnection = new SqlConnection();
myADONETConnection = (SqlConnection)(Dts.Connections["$Package::SAMDBConnection"].AcquireConnection(Dts.Transaction) as SqlConnection);
代码和整个项目的构建没有任何问题。但是,当我运行包时,我收到以下错误消息。
System.Data.SqlClient.SqlException (0x80131904): A network-related or instance-specific error
occurred while establishing a connection to SQL Server. The server was not found or was not
accessible. Verify that the instance name is correct and that SQL Server is configured to
allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating
Server/Instance Specified)
at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity,
SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String
newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance,
SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool
pool, String accessToken, Boolean applyTransientFaultHandling,
SqlAuthenticationProviderManager sqlAuthProviderManager)
at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options,
DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection
owningConnection, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool,
DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey,
DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject,
DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject,
DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject,
UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection,
DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject,
TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal&
connection)
at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection
owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions,
DbConnectionInternal oldConnection, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection
outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry,
DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection,
DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions
userOptions)
at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.Open()
at Microsoft.SqlServer.Dts.Runtime.ManagedHelper.GetManagedConnection(String
assemblyQualifiedName, String connStr, Object transaction)
at Microsoft.SqlServer.Dts.Runtime.ConnectionManager.AcquireConnection(Object txn)
at ST_1d4a35a96e484ef884dbd7beb30de13d.ScriptMain.Main()
ClientConnectionId:00000000-0000-0000-0000-000000000000
Error Number:-1,State:0,Class:20
有人可以帮忙吗?当我双击包中的 SAMDBConnection 连接管理器并单击“测试连接”按钮时,我收到相同的错误消息。如果我不使用参数化,则连接成功,并且连接到硬编码数据库没有任何问题。但是,这不是一个选项,因为我需要将作业部署到多个 SSIS 服务器(Dev、QA 和 PROD)中,并且我需要参数化连接参数。我将使用 Microsoft Azure TFS 构建和发布管道来构建包并将其部署到多个 SSIS 服务器中。我需要提供数据库连接参数作为此作业的发布定义的一部分。
我注意到的一个变化是我正在使用语句 Dts.Variables["$Package:FileDelimiter"].Value 访问其他变量,在这种情况下,我将其作为 Dts.Connections["$Package:: SAMDBConnection"].AcquireConnection,我不确定这是否正确。
抱歉,帖子太长了。我是 Salesforce 人员,SSIS 不是我的菜。
请帮忙。
【问题讨论】:
-
您是使用斜线来分隔服务器名称和实例名称,还是使用反斜线?您是否尝试过使用
ServerNameOrIpAddress\InstanceName而不是ServerNameOrIpAddress/InstanceName? -
我正在使用反斜杠。这就是我连接到 SSMS 的方式。
-
您在混合使用 ADO 和 SqlClient 连接吗?你所拥有的一切看起来都像一个 SqlClient 连接,但你一直在引用 ADO。
标签: c# sql-server ssis ado.net parameter-passing