Kode für das ODBC Datenziel Script Komponente

 

' Microsoft SQL Server Integration Services user script component
' This is your new script component in Microsoft Visual Basic .NET
' ScriptMain is the entrypoint class for script components

Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
Imports System.Data.Odbc

Public Class ScriptMain
    Inherits UserComponent

    Private mCon As OdbcConnection
    Private mCmd As OdbcCommand
    Private mZähler As Integer
    Private mStartzeit As Date

    Public Overrides Sub AcquireConnections(ByVal Transaction As Object)
        Dim ConnectionString As String

        mStartzeit = Now()
        Try
            ConnectionString = Me.Connections.Verbindung.ConnectionString
            mCon = New OdbcConnection(ConnectionString)
            mCon.Open()
            mCon.ChangeDatabase("TempDB")
        Catch ex As Exception
            Me.ComponentMetaData.FireError(255, "AcquireConnections", ex.ToString, "", 0, False)
        End Try
    End Sub

    Public Overrides Sub PreExecute()

        MyBase.PreExecute()

        Try
            mCmd = New OdbcCommand("INSERT INTO dbo.Contact (FirstName, MiddleName, LastName) VALUES(?, ?, ?)", mCon)
            With mCmd
                .Parameters.Add("@FirstName", OdbcType.NVarChar, 50)
                .Parameters.Add("@MiddleName", OdbcType.NVarChar, 50)
                .Parameters.Add("@LastName", OdbcType.NVarChar, 50)
            End With
        Catch ex As Exception
            Me.ComponentMetaData.FireError(255, "PreExecute", ex.ToString, "", 0, False)
        End Try
    End Sub

    Public Overrides Sub Eingabe0_ProcessInputRow(ByVal Row As Eingabe0Buffer)
        Try
            mZähler += 1
            With mCmd
                If Not Row.FirstName_IsNull Then
                    .Parameters("@FirstName").Value = Row.FirstName
                Else
                    .Parameters("@FirstName").Value = DBNull.Value
                End If
                If Row.MiddleName_IsNull Then
                    .Parameters("@MiddleName").Value = DBNull.Value
                Else
                    .Parameters("@MiddleName").Value = Row.MiddleName
                End If
                If Not Row.LastName_IsNull Then
                    .Parameters("@LastName").Value = Row.LastName
                Else
                    .Parameters("@LastName").Value = DBNull.Value
                End If

                .ExecuteNonQuery()
            End With
        Catch ex As Exception
            Me.ComponentMetaData.FireError(255, "Eingabe0_ProcessInputRow", ex.ToString, "", 0, False)
        End Try
    End Sub

    Public Overrides Sub ReleaseConnections()
        Try
            mCon.Close()
        Catch ex As Exception
            Me.ComponentMetaData.FireError(255, "ReleaseConnections", ex.ToString, "", 0, False)
        End Try
    End Sub

    Public Overrides Sub PostExecute()
        Dim Zeitdifferenz As TimeSpan

        MyBase.PostExecute()

        Zeitdifferenz = Now.Subtract(mStartzeit)

        Me.ComponentMetaData.FireInformation(0, Me.ComponentMetaData.Name, "Anzahl Datensätze: " & _
                    mZähler.ToString & " - Inserts pro Sekunde: " & mZähler / Zeitdifferenz.TotalSeconds, "", 0, False)
    End Sub
End
Class
 

Das Beispielpaket finden Sie hier