我将以下代码写入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}
答案 0 :(得分:13)
非常简单的修复:我创建了QUAHILSQ03连接管理器作为OLE DB连接。只需将其更改为ADO.NET,我的代码运行正常。
答案 1 :(得分: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
。
有关详细信息,请参阅this文章