日期:2014-05-17  浏览次数:20530 次

ssis如何通过代码更新数据流源的sqlcommand
    原因:安装系统后,无法通过sqlcommand来实现参数的使用。如果将代码设置为select * from t_table where column1 > ?无法识别参数。这个问题搞不定
    解决方案:希望通过脚本组建或者数据流的事件脚本,通过脚本来进行字符串替换,实现参数的功能。
   
    问题:如何在包的脚本组件中,通过代码引用已经定义的数据流源的sqlcommand属性,这样我就可以通过代码来实现参数查询的功能。或者在包的事件程序中,onPreExecute事件中处理这个任务。

    知识缺陷:由于一直没有接触vb.net不知道如何通过代码来引用已有对象,成了我的痛。

    希望不吝赐教!
------最佳解决方案--------------------

Imports System.Data.SqlClient
...
Public Class ScriptMain
    Inherits UserComponent

    Dim connMgr As IDTSConnectionManager100
    Dim sqlConn As SqlConnection
    Dim sqlCmd As SqlCommand
    Dim sqlParam As SqlParameter

    Public Overrides Sub AcquireConnections(ByVal Transaction As Object)

        connMgr = Me.Connections.MyADONETConnectionManager
        sqlConn = CType(connMgr.AcquireConnection(Nothing), SqlConnection)

    End Sub

    Public Overrides Sub PreExecute()

        sqlCmd = New SqlCommand("INSERT INTO Person.Address2(AddressID, City) " & _
            "VALUES(@addressid, @city)", sqlConn)
        sqlParam = New SqlParameter("@addressid", SqlDbType.Int)
        sqlCmd.Parameters.Add(sqlParam)
        sqlParam = New SqlParameter("@city", SqlDbType.NVarChar, 30)
        sqlCmd.Parameters.Add(sqlParam)

    End Sub

    Public Overrides Sub MyAddressInput_ProcessInputRow(ByVal Row As MyAddressInputBuffer)
        With sqlCmd
            .Parameters("@addressid").Value = Row.AddressID
            .Parameters("@city").Value = Row.City
            .ExecuteNonQuery()
        End With
    End Sub

    Public Overrides Sub ReleaseConnections()

        connMgr.ReleaseConnection(sqlConn)

    End Sub

End Class
参考

Override the AcquireConnections method to connect to the external data source。例子里是ado.net,不过在
[code=VB.NET]
Dim cm As ConnectionManager
Dim cmParam As Wrapper.IDTSConnectionManagerDatabaseParameters90
Dim conn As OleDb.OleDbConnection

cm = Dts.Connections("oledb")
cmParam = CType(cm.InnerObject, Wrapper.IDTSConnectionManagerDatabaseParameters90)
conn = CType(cmParam.GetConnectionForSchema(), OleD