Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在VB.net中调用SQL Server 2000 DTS包_Sql_Vb.net_Sql Server 2000 - Fatal编程技术网

如何在VB.net中调用SQL Server 2000 DTS包

如何在VB.net中调用SQL Server 2000 DTS包,sql,vb.net,sql-server-2000,Sql,Vb.net,Sql Server 2000,如何从VB.net应用程序调用DTS?如果您指的是属于sql server 2000的一部分的DTS(在更高版本中不可用,因为它被integration services取代),那么有几种方法 如果应用程序位于服务器上,则可以使用process.start从运行它 process.start("dtsrun /S ""server name"" /U sa /N ""d:\task.dts""") 如果它不在仍然可以使用的服务器上,而是在使用master.dbo.xp\u cmdshell调用

如何从VB.net应用程序调用DTS?

如果您指的是属于sql server 2000的一部分的DTS(在更高版本中不可用,因为它被integration services取代),那么有几种方法

如果应用程序位于服务器上,则可以使用process.start从运行它

process.start("dtsrun /S ""server name"" /U sa /N ""d:\task.dts""")
如果它不在仍然可以使用的服务器上,而是在使用master.dbo.xp\u cmdshell调用的存储过程中,则在代码中调用SP。(尽管如果使用xp_cmdshell,您必须意识到打开的安全风险)

或者,您也可以阅读本文,它解释了如何从vb脚本执行此操作,但代码可以轻松转换:


这是一组非常粗糙的类,如果您希望从VB.Net对DTS包进行编程控制,那么这些类应该可以做您想要做的事情。我不保证它的正确性或可靠性,但它应该给你足够的指针开始

只需在VisualStudio项目中添加对DTSPackage对象(COM)库的引用

Option Explicit On
选项严格限制在

导入DTS 导入System.Runtime.InteropServices

名称空间测试 公共类DTSRunner 作为ComTypes.i连接点的专用cpPoint 作为ComTypes.IConnectionPointContainer的专用cpContainer 作为整数的私有intCookie 作为PackageEventsSink的专用PES

    Public Sub RunPackage(ByVal packageName As String)

        Dim pkg As New DTS.PackageClass
        pkg.LoadFromSQLServer("MySQLServer", String.Empty, String.Empty, DTS.DTSSQLServerStorageFlags.DTSSQLStgFlag_UseTrustedConnection, String.Empty, String.Empty, String.Empty, PackageName, System.Reflection.Missing.Value)

        cpContainer = CType(pkg, ComTypes.IConnectionPointContainer)
        cpContainer.FindConnectionPoint(New Guid("10020605-EB1C-11CF-AE6E-00AA004A34D5"), cpPoint)
        PES = New PackageEventsSink
        cpPoint.Advise(PES, intCookie)
        AddHandler PES.OnPackageOnError, AddressOf PackageErroredHandler
        AddHandler PES.OnPackageOnQueryCancel, AddressOf PackageQueryCancelHandler
        pkg.Execute()

        If cpPoint IsNot Nothing Then
            cpPoint.Unadvise(intCookie)
        End If
        If Not pkg Is Nothing Then
            pkg.UnInitialize()
        End If
        If PES IsNot Nothing Then
            RemoveHandler PES.OnPackageOnError, AddressOf PackageErroredHandler
            RemoveHandler PES.OnPackageOnQueryCancel, AddressOf PackageQueryCancelHandler
        End If
        PES = Nothing
        cpContainer = Nothing
        cpPoint = Nothing
        pkg = Nothing
    End Sub

    Private Sub PackageErroredHandler(ByVal sender As Object, ByVal e As DTSEventArgs)
        If Not packageErrored Then
            TraceEvent(TraceEventType.Error, -1, _
            "Error In DTS Package : {1} - {2} - {3} - {4}", _
            .EventSource, e.ErrorCode, e.Source, e.Description)
            packageErrored = True
        End If
        e.Cancel = False
    End Sub

    Private Sub PackageQueryCancelHandler(ByVal sender As Object, ByVal e As DTSEventArgs)
        e.Cancel = False
    End Sub


    Private Class DTSEventArgs
        Inherits EventArgs

        Public EventSource As String
        Public ErrorCode As Integer
        Public Source As String
        Public Description As String
        Public Cancel As Boolean
        Public PercentComplete As Integer = 0

        Public Sub New(ByVal EventSource As String, ByVal Source As String, ByVal Description As String, ByVal ErrorCode As Integer, ByVal Cancel As Boolean)
            Me.EventSource = EventSource
            Me.Source = Source
            Me.Description = Description
            Me.ErrorCode = ErrorCode
            Me.Cancel = Cancel
        End Sub

    End Class

    Private Delegate Sub PackageOnErrorEventHandler(ByVal sender As Object, ByVal e As DTSEventArgs)
    Private Delegate Sub PackageOnFinishEventHandler(ByVal sender As Object, ByVal e As DTSEventArgs)
    Private Delegate Sub PackageOnStartEventHandler(ByVal sender As Object, ByVal e As DTSEventArgs)
    Private Delegate Sub PackageOnProgressEventHandler(ByVal sender As Object, ByVal e As DTSEventArgs)
    Private Delegate Sub PackageOnQueryCancelEventHandler(ByVal sender As Object, ByVal e As DTSEventArgs)

    Private Class PackageEventsSink
        Implements DTS.PackageEvents

        Public Event OnPackageOnError As PackageOnErrorEventHandler
        Public Event OnPackageOnFinish As PackageOnFinishEventHandler
        Public Event OnPackageOnStart As PackageOnStartEventHandler
        Public Event OnPackageOnProgress As PackageOnProgressEventHandler
        Public Event OnPackageOnQueryCancel As PackageOnQueryCancelEventHandler

        Overridable Overloads Sub OnError(ByVal EventSource As String, _
        ByVal ErrorCode As Integer, ByVal Source As String, _
        ByVal Description As String, ByVal HelpFile As String, _
        ByVal HelpContext As Integer, ByVal IDofInterfaceWithError As String, _
        ByRef pbCancel As Boolean) Implements DTS.PackageEvents.OnError

            Dim e As New DTSEventArgs(EventSource, Source, Description, ErrorCode, pbCancel)
            TraceEvent(TraceEventType.Verbose, 0, String.Format(" OnError in {0}; ErrorCode = {1}, Source = {2}, Description = {3}, HelpFile = {4}, HelpContext = {5}, IDofInterfaceWithError = {6}", EventSource, ErrorCode, Source, Description, HelpFile, HelpContext, IDofInterfaceWithError))
            RaiseEvent OnPackageOnError(Me, e)
            pbCancel = e.Cancel

        End Sub

        Overridable Overloads Sub OnFinish(ByVal EventSource As String) Implements DTS.PackageEvents.OnFinish

            Dim e As New DTSEventArgs(EventSource, String.Empty, "Execution Finished", 0, False)
            TraceEvent(TraceEventType.Verbose, 0, String.Format(" OnFinish in {0}", EventSource))
            RaiseEvent OnPackageOnFinish(Me, e)

        End Sub

        Overridable Overloads Sub OnProgress(ByVal EventSource As String, _
        ByVal ProgressDescription As String, ByVal PercentComplete As Integer, _
        ByVal ProgressCountLow As Integer, ByVal ProgressCountHigh As Integer) _
        Implements DTS.PackageEvents.OnProgress

            Dim e As New DTSEventArgs(EventSource, String.Empty, ProgressDescription, 0, False)
            e.PercentComplete = PercentComplete
            TraceEvent(TraceEventType.Verbose, 0, String.Format(" OnProgress in {0}; ProgressDescription = {1}, PercentComplete = {2}, ProgressCountLow = {3}, ProgressCountHigh = {4}", EventSource, ProgressDescription, PercentComplete, ProgressCountLow, ProgressCountHigh))
            RaiseEvent OnPackageOnProgress(Me, e)

        End Sub


        Overridable Overloads Sub OnQueryCancel(ByVal EventSource As String, ByRef pbCancel As Boolean) Implements DTS.PackageEvents.OnQueryCancel

            Dim e As New DTSEventArgs(EventSource, String.Empty, String.Empty, 0, pbCancel)
            TraceEvent(TraceEventType.Verbose, 0, String.Format(" OnQueryCancel in {0}; pbCancel = {1}", EventSource, pbCancel))
            RaiseEvent OnPackageOnQueryCancel(Me, e)
            pbCancel = e.Cancel

        End Sub

        Overridable Overloads Sub OnStart(ByVal EventSource As String) Implements DTS.PackageEvents.OnStart

            Dim e As New DTSEventArgs(EventSource, String.Empty, "Execution Started", 0, False)
            TraceEvent(TraceEventType.Verbose, 0, String.Format(" OnStart in {0}", EventSource))
            RaiseEvent OnPackageOnStart(Me, e)

        End Sub

    End Class

        #End Region

End Class

End Namespace

什么是DTS?您能更详细一点吗?DTS=数据转换服务(在SQL Server企业管理器中使用)