0

VBA コードを vb.net に変換しようとしていますが、if ステートメントの周りの特定の値をデータベースで検索しようとすると問題が発生します。どんな提案でも大歓迎です。データベースは確認と呼ばれ、タイプは列で、電子メールは探している値です。データセットは機能しますか?

Function SendEmails() As Boolean

    Dim objOutlook As Outlook.Application
    Dim objOutlookMsg As Outlook.MailItem
    Dim objOutlookRecip As Outlook.Recipient
    Dim objOutlookAttach As Outlook.Attachment

    Dim intResponse As Integer

    Dim confirmation As New ADODB.Recordset
    Dim details As New ADODB.Recordset

    On Error GoTo Err_Execute


    Dim MyConnObj As New ADODB.Connection
    Dim cn As New ADODB.Connection()

    MyConnObj.Open( _
             "Provider = sqloledb;" & _
             "Server=myserver;" & _
             "Database=Email_Text;" & _
             "User Id=bla;" & _
             "Password=bla;")

    confirmation.Open("Confirmation_list", MyConnObj)
    details.Open("MessagesToSend", MyConnObj)


    If details.EOF = False Then

      confirmation.MoveFirst()
      Do While Not confirmation.EOF
          If confirmation![Type] = "Email" Then 

             ' Create the Outlook session.
              objOutlook = CreateObject("Outlook.Application")

             ' Create the message.
    End IF
4

2 に答える 2

1

本当にコードを NET に変換したい場合は、ADODB オブジェクトを削除して System.Data.SqlClient クラスを使用する必要があると思います。もちろん、ADO.NET は実際には分離モデルを使用してデータベースを操作するため、いくつかのことは今ではより困難になっています。

ADO.NET クラスを使用したコードとほぼ同等のもの

....
' Use Try/Catch not the On Error Goto....'
Try
    Dim conStr = "Server=myserver;Database=Email_Text;User Id=XXXX;Password=XXXXX;"
    Using MyConnObj = new SqlConnection(conStr)

    ' Getting all the details rows and columns, '
    ' but you should select only the columns needed here....'
    Using cmdDetails = new SqlCommand("SELECT * FROM MessagesToSend", MyConnObj)

    ' You need only the rows with Type=Email, so no need to retrieve all the rows'
    Using cmdConfirm = new SqlCommand("SELECT * FROM Confirmation_list " & _ 
                                      "WHERE [Type] = 'EMail' ", MyConnObj)
        MyConnObj.Open

        Using da = new SqlDataAdapter(cmdConfirm)
           Dim dt = new DataTable()
           da.Fill(dt)

           Using reader = cmdDetails.ExecuteReader()
              While reader.Read()
                 For Each row in dt.Rows 
                       ... ' The Outlook app should be instanced outside the loop'
                 Next
              Loop
          End Using
       End Using
    End Using          
    End Using
    End Using
Catch x As Exception 
    MessageBox.Show("Error:" & x.Message)
End Try
于 2013-11-04T12:36:29.807 に答える