我现在一直在寻找解决方案,我似乎仍然无法找到解决方案。我在脚本组件中获取连接时遇到问题。在将其插入
之前,我需要查询我的数据库以检索要使用的Idpublic override void AcquireConnections(object Transaction)
{
connMgr = base.Connections.Connection;
conn = (SqlConnection)connMgr.AcquireConnection(null);
}
我在这里得到一个例外。
System.InvalidCastException: Unable to cast COM object of type 'System.__ComObject' to class type 'System.Data.SqlClient.SqlConnection'. Instances of types that represent COM components cannot be cast to types that do not represent COM components; however they can be cast to interfaces as long as the underlying COM component supports QueryInterface calls for the IID of the interface.
任何解决方案?
答案 0 :(得分:5)
对于那些希望能够在脚本组件中执行此操作的人:
您可以在脚本中执行以下操作:
using (SqlConnection connection = this.Connections.Connection.AcquireConnection(null) as SqlConnection)
{
using (SqlCommand command = connection.CreateCommand())
{
command.CommandText = "SELECT [Value] FROM dbo.MyTable";
command.CommandType = CommandType.Text;
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
ProfanityWords.Add(reader.GetValue(0).ToString());
}
}
}
this.Connections.Connection.ReleaseConnection(connection);
}
答案 1 :(得分:2)
应创建ADO.NET连接管理器并引用代码以键入强制转换为SqlConnection
。如果您的SSIS pakcage中没有ADO.NET连接,则会收到TypeCast异常。如果要使用SqlConnection,则应使用以下步骤。
在代码中使用以下行。
var connObj = Dts.Connections["ADO.NETConnectionName"].AcquireConnection(null);
var sqlConn = (SqlConnection)connObj;
完成SQL连接后。使用以下代码关闭/释放连接。
Dts.Connections["ADO.NETConnectionName"].ReleaseConnection(connObj);
希望这有帮助。