【问题标题】:VB.Net sql data to text fileVB.Net sql 数据到文本文件
【发布时间】:2015-07-30 20:41:50
【问题描述】:

我正在尝试将从 sql 查询检索到的数据写入 Visual Basic 2012 中的文本文件,这是一些我只需要朝正确方向推动的代码

Imports System.Data.SqlClient
Imports System.IO

Public Class frmResults
    Dim cn As New SqlConnection("Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\bryan\Documents\TeamGFinalProject\BookCollection.MDF;Integrated Security=True;Connect Timeout=30")
    Dim cmd As New SqlCommand
    Dim dr As SqlDataReader
    Dim table As New DataTable("sales")

Private Sub frmResults_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    cmd.Connection = cn
End Sub

Private Sub BtnReport_Click(sender As Object, e As EventArgs) Handles BtnReport.Click
    cn.Open()
    cmd.CommandText = "select * from sales  where ord_date BETWEEN '" & dtpStart.Text & "' AND '" & dtpEnd.Text & "' Order BY ord_date;"

    Using sw As StreamWriter = New StreamWriter("Dates.txt")
        Dim reader As SqlDataReader = cmd.ExecuteReader()

        sw.WriteLine(reader)
        reader.Close()
    End Using

    cn.Close()
End Sub

End Class

【问题讨论】:

  • 欢迎来到stackoverflow...你能解释一下你的代码到底有什么问题吗?

标签: vb.net sqldatareader


【解决方案1】:

从 SqlDataReader 读取时,您需要读取一行结果 (SqlDataReader.Read),对其进行处理,然后继续下一条记录,直到获得所需内容为止。您可以使用SqlDataReader.GetValues 方法一次从行中获取所有列值。

建议:使用参数来构建您的命令文本 (see here)。

Private Sub BtnReport_Click(sender As Object, e As EventArgs) Handles BtnReport.Click       
    cn.Open()
    cmd.CommandText = "select * from sales  where ord_date BETWEEN '" & dtpStart.Text & "' AND '" & dtpEnd.Text & "' Order BY ord_date;"

    Using sw As StreamWriter = New StreamWriter("Dates.txt")
        Using reader As SqlDataReader = cmd.ExecuteReader()
            Dim values(reader.FieldCount - 1) As Object

            While reader.Read
                reader.GetValues(values)

                sw.WriteLine(String.Join(vbTab, values))
            End While
        End Using
    End Using

    cn.Close()

【讨论】:

  • 这对我有用,但是在它读取“Dates.txt”的地方我放了整个文件路径。 “C:\Users\UserName\Desktop\Dates.txt”。但是,如果文件路径太长,您需要将其设为单独的字符串,然后在流编写器中使用该变量。
【解决方案2】:

你很亲密。

SqlDataReader 对象有点类似于 StreamReader 或其他读取器对象。您需要做的实际上是使用 reader 对象遍历您的数据。在您阅读时,这些字段将填充到阅读器对象中。然后,您可以写出该数据。这是一个简单的工作示例:

While (reader.Read)
   'Get data row by row
   Dim row_data(reader.FieldCount - 1) As String
   Dim i As Integer
   For i = 0 To reader.FieldCount - 1
       row_data(i) = reader(i).ToString
   Next

   'Build a single string (simplistic CSV style)
   String.Join(",",row_data)

   'Write to file
   sw.WriteLine(reader)
End While

这可能不是处理此问题的最有效方法,但它应该让您对正在发生的事情有一个很好的了解。

【讨论】:

    【解决方案3】:

    您需要遍历结果集并写入文件。

    这是一个简单的例子。

    How to stream data from sqldatareader to a text file in VB.Net

    【讨论】:

    • 感谢您的第一个回答!在这些情况下,将信息从源材料直接复制并粘贴到 SO 并链接到源是很有帮助的。 - 这有助于更好地索引您的搜索答案,并让用户快速获得答案。干杯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多