1

VB スクリプトを使用して複数の確認メールを送信する SSIS パッケージを作成しています。確認メールの 1 つには、接続マネージャーの 1 つからのサーバーの名前が必要です。次のことを行うスクリプトがあります。

Public Sub Main()

    '------------- Set Vriables
    Dim htmlMessageTo As String = _
      Dts.Variables("Email_To").Value.ToString
    Dim htmlMessageCC As String = _
      Dts.Variables("Email_CC").Value.ToString
    Dim htmlMessageFrom As String = _
      Dts.Variables("Email_From").Value.ToString

    Dim ServerAConnectionString As String = _
          DirectCast(Dts.Connections("ServerA").AcquireConnection(Dts.Transaction), String)
    Dim smtpConnectionString As String = _
          DirectCast(Dts.Connections("Mail1").AcquireConnection(Dts.Transaction), String)
    Dim smtpServerStr As String = _
      smtpConnectionString.Split(New Char() {"="c, ";"c})(1)

    Dim smtpServer As New SmtpClient(smtpServerStr)

    Dim myMail As New MailMessage
    With myMail
        .From = New MailAddress(htmlMessageFrom)
        .To.Add(htmlMessageTo)
        If Len(htmlMessageCC) > 0 Then
            .CC.Add(htmlMessageCC)
        End If
        .IsBodyHtml = True
        .Subject = "The process failed for server " & ServerAConnectionString 
        .Body = "The process failed for server " & ServerAConnectionString 
    End With

    smtpServer.Send(myMail)

    Dts.TaskResult = ScriptResults.Success
End Sub

ServerA のサーバー名だけを取得しようとしているところです。接続マネージャー Mail1 は、私が使用している SMTP サーバーです。他の文字列ではすべて正常に機能していますが、この特定の文字列ではエラーが発生します。接続文字列を取得できると思いますが、それを解析するのに十分な VB を知りません。接続オブジェクトに入り、サーバー名のプロパティを表示する方法があることを願っていますが、見つけることができませんでした。

4

1 に答える 1

2

ADO.NET 接続の場合:

    Dim dbConn As System.Data.SqlClient.SqlConnection = Dts.Connections("ServerA").AcquireConnection(Dts.Transaction)
    Dim dbServer As String = dbConn.DataSource
    Dts.Events.FireInformation(-1, "", dbServer, String.Empty, -1, False)

ログに次のように表示されます。

 [] Information: ServerName\InstanceName

OleDB 接続は少し複雑です。vb スクリプトで同じものにアクセスするには、.NET アセンブリ Microsoft.SqlServer.DTSRuntimeWrap への参照を追加してから、次を使用します。

    Dim connectionManager As ConnectionManager = Dts.Connections("oleDBConnection")
    Dim cmParam As Microsoft.SqlServer.Dts.Runtime.Wrapper.IDTSConnectionManagerDatabaseParameters100
    cmParam = CType(connectionManager.InnerObject, Wrapper.IDTSConnectionManagerDatabaseParameters100)
    Dim conn As OleDb.OleDbConnection = CType(cmParam.GetConnectionForSchema(), OleDb.OleDbConnection)
    Dts.Events.FireInformation(-1, "", conn.DataSource, String.Empty, -1, False)

テストおよび検証済みの参照: http://blogs.msdn.com/b/mattm/archive/2008/08/22/accessing-oledb-connection-managers-in-a-script.aspx

于 2013-07-11T18:51:22.393 に答える