1

私はこれを理解しようとして苦労してきました。特定の機関と関係のある特定のデータを選択するための SQL クエリを作成しました。MySQL Workbench でテストしたところ、SQL クエリは問題なく動作しましたが、そのデータを VB.NET から Word ドキュメントにエクスポートしようとすると、文字通り SQL が出力されます。

以下は私のコードです:

    Dim sqlAdapter As New MySqlDataAdapter
    Dim sqlCommand As New MySqlCommand
    Dim sqlTable As New DataTable

    Dim sqlFundText As String = "select mutual_Fund_name, concat(contact_first_name,' ',contact_last_name) from mutual_fund mf, contact c, mutual_fund_has_contact mfhc, institution i, institution_has_mutual_Fund ihmf where mf.mutual_fund_id = mfhc.mutual_fund_id and c.contact_id = mfhc.contact_id and ihmf.mutual_fund_id = mf.mutual_fund_id and i.institution_id = ihmf.institution_id and i.institution_name ='" & InstitutionNameTextBox.Text & "' order by mutual_fund_name;"

    With sqlCommand
        .CommandText = sqlFundText
        .Connection = sConnection
    End With

    With sqlAdapter
        .SelectCommand = sqlCommand
        .Fill(sqlTable)
    End With

    oPara9 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks.Item("\endofdoc").Range)
    With oPara9
        .Range.Font.Bold = False
        .Range.Text = sqlFundText
        .Range.Font.Size = 10
        .Format.SpaceAfter = 5
        .Range.InsertParagraphAfter()
    End With

結果は次のとおりです。

ここに画像の説明を入力

ご覧のとおり、SQL ステートメントが出力されます。

私はそれが関係していることを知っています

.Range.Text = sqlFundText

私はそれを修正する方法がわかりません。誰でもこれを修正する正しい方法を教えてもらえますか?

4

2 に答える 2

0

これは、SQL を受け入れて CSV を返す Sub() です。防弾ではありませんが、私のユーティリティコードでは機能します。

あなたの場合、タブを区切り文字として使用して、データがWordに存在すると、手動で簡単にテーブルに変換できるようにすることができます。

Yu は、このコードを使用して、Word でテーブルを作成/入力することもできます。

   Function CSVReportFromSQL(SQL As String, Optional ToFilePath As String = "") As String
    ' note return differences if ToFilePath is provided
    '   If ToFilePath: check for 'OK' on return
    '   Else check return length = 0 for error 
    Try
        Dim sOut As String = ""

        Using con As New SqlConnection(g.OISConnectString)
            Dim command As New SqlCommand(SQL, con)
            con.Open()

            ' column headers
            Dim rdr As SqlDataReader = command.ExecuteReader(CommandBehavior.SchemaOnly)
            For i As Integer = 0 To rdr.FieldCount - 1
                sOut &= "," & rdr.GetName(i)
            Next
            sOut = sOut.Substring(1) & vbCrLf
            rdr.Close()

            rdr = command.ExecuteReader()
            While rdr.Read()
                For i As Integer = 0 To rdr.FieldCount - 1
                    'Debug.Print(rdr.GetFieldType(i).Name & " " & rdr.GetName(i))
                    'http://msdn.microsoft.com/en-us/library/4e5xt97a(v=vs.80).aspx
                    Select Case rdr.GetFieldType(i).Name
                        Case "String", "DateTime"
                            sOut &= """" & rdr(i).ToString.Replace("""", """""") & ""","
                        Case Else
                            sOut &= rdr(i).ToString & ","
                    End Select
                Next
                sOut &= vbCrLf
            End While
            rdr.Close()
        End Using

        If ToFilePath.Length > 0 Then
            My.Computer.FileSystem.WriteAllText(ToFilePath, sOut, False)
            Return "OK"
        Else
            Return sOut
        End If

    Catch ex As Exception
        If ToFilePath.Length > 0 Then
            Return ex.Message
        Else
            MsgBox("Problem creating CSV Report" & vbCrLf & ex.Message)
            Return ""
        End If
    End Try
End Function
于 2014-06-18T18:07:43.597 に答える