7

我将以下代码写入 SSIS 脚本任务以连接到我的 SQL 数据库:

 ConnectionManager cm;
 System.Data.SqlClient.SqlConnection sqlConn;
 System.Data.SqlClient.SqlCommand sqlComm;

 cm = Dts.Connections["QUAHILSQ03"];

 sqlConn = (System.Data.SqlClient.SqlConnection)cm.AcquireConnection(Dts.Transaction);

但是这一行:

 sqlConn = (System.Data.SqlClient.SqlConnection)cm.AcquireConnection(Dts.Transaction);

返回以下异常:

{“无法将“System.__ComObject”类型的 COM 对象转换为“System.Data.SqlClient.SqlConnection”类类型。表示 COM 组件的类型实例不能转换为不表示 COM 组件的类型;但是它们可以只要底层 COM 组件支持接口的 IID 的 QueryInterface 调用,就转换为接口。"} System.Exception {System.InvalidCastException}

4

2 回答 2

14

非常简单的修复:我创建了 QUAHILSQ03 连接管理器作为 OLE DB 连接。只需将其更改为 ADO.NET,我的代码就可以正常工作。

于 2012-08-09T15:10:37.060 回答
6

在我看来,您正在使用 OLEDB 连接。oledb 连接管理器上的获取连接方法返回一个 COM 对象,因此您收到错误消息。

尝试这个 :

   ConnectionManager cm = Dts.Connections["QUAHILSQ03"];
   IDTSConnectionManagerDatabaseParameters100 cmParams = cm.InnerObject 
   as IDTSConnectionManagerDatabaseParameters100;
   OleDbConnection conn = cmParams.GetConnectionForSchema() as OleDbConnection;

您需要使用Microsoft.SqlServer.Dts.Runtime.Wrapper命名空间使用上述方法,您无法保留transaction.

有关更多详细信息,请参阅本文

于 2012-08-09T02:01:57.837 回答