SSIS脚本组件连接

时间:2012-11-27 06:07:39

标签: ssis database-connection script-component

我现在一直在寻找解决方案,我似乎仍然无法找到解决方案。我在脚本组件中获取连接时遇到问题。在将其插入

之前,我需要查询我的数据库以检索要使用的Id
public 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.

任何解决方案?

2 个答案:

答案 0 :(得分:5)

对于那些希望能够在脚本组件中执行此操作的人:

  1. 双击脚本组件以打开"脚本转换编辑器"
  2. 点击"连接管理器"列表项目。
  3. 添加新的连接管理器。选择现有的ADO.NET连接管理器。
  4. 点击"脚本"列表项,然后是"编辑脚本..."按钮。
  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);
    }
    

    enter image description here

答案 1 :(得分:2)

应创建ADO.NET连接管理器并引用代码以键入强制转换为SqlConnection。如果您的SSIS pakcage中没有ADO.NET连接,则会收到TypeCast异常。如果要使用SqlConnection,则应使用以下步骤。

  1. 创建ADO.NET连接。
  2. 在代码中使用以下行。

    var connObj = Dts.Connections["ADO.NETConnectionName"].AcquireConnection(null);
    
    var sqlConn = (SqlConnection)connObj;
    
  3. 完成SQL连接后。使用以下代码关闭/释放连接。

    Dts.Connections["ADO.NETConnectionName"].ReleaseConnection(connObj);
    
  4. 希望这有帮助。