0

我在 Visual Studio 2005 中使用 oledbdataadapter 加载 CSV 文件。我遇到的问题是,如果任何给定字段的第一行的值为 0,则 oledbdataadapter 会将此字段转换为整数。它将所有后续值四舍五入为一个整数,去除小数点。作为测试,我用记事本手动打开 csv 并将第一行更改为 0.0 而不是仅 0,然后文件正确打开,使该字段成为双倍。打开 CSV 和格式字段加倍的正确方法是什么?

这是打开代码:

Sub LoadDB2Graph(ByVal DaFilename As String)
    Dim DaTable As String
    Try
        MyDataAdapter.Dispose()
        dsPressScope.Tables.Clear()
    Catch e1 As Exception
    End Try
    MySelectCommand.CommandText = "SELECT * FROM [" & DaFilename & "] WHERE [Time] <> 0"
    MyDataAdapter.SelectCommand = MySelectCommand
    Try
        Call DeleteTestLine(1)
        Call DeleteTestLine(2)
        DaTable = Replace(DaFilename, ".", "_")
        MyDataAdapter.Fill(dsPressScope, DaTable)
        dgPressScope.DataSource = dsPressScope
        dgPressScope.DataMember = DaTable
        dgPressScope.Refresh()
        ZedGraph.GraphPane.CurveList.Clear()
        InitializeTestLines()
        ZedGraph.GraphPane.Title.Text = DBDirectory & DaFilename
        ZedGraph.GraphPane.AxisChange()
        tabMain.SelectTab("tbSelectPens")
        Me.Text = "Press Scope - " & DBDirectory & DaFilename
    Catch e1 As Exception
        MessageBox.Show("Load Failed")
    End Try
    LoadPens2List()
End Sub
4

2 回答 2

0

诀窍是使用文件schema.ini

使用此文件(此处由 Microsoft 记录的格式),当文本驱动程序参与数据访问操作时,您可以指定一组信息来补充您的连接字符串

例如,您可以像这样编写 schema.ini:

[data.txt]
Format=Delimited(;)
MaxScanRows=0
Col1=ID Integer
Col2=ProductName Text Width 100
Col3=Price Double 

这假定您的文本文件名为 Data.txt,由三列 Integer、Text 和 Double 组成。该文件应保存在文本文件所在的同一目录中。

于 2012-12-28T14:08:46.123 回答
0

作为替代方案,您可以使用TextFieldParser类来加载 CSV 文件,而不是使用OleDbDataAdapter该类。这样做可以让您更好地控制整个过程。

例如,您可以执行以下操作:

Using reader As New TextFieldParser("my csv file Path")
    reader.TextFieldType = FieldType.Delimited
    reader.SetDelimiters(",")
    While Not reader.EndOfData
        Try
            For Each field As String In reader.ReadFields()
                Dim value As Double = 0
                If Double.TryParse(field, value) Then
                    ' Process this field value
                Else
                    ' Handle the invalid value
                End If
            Next
        Catch ex As MalformedLineException
            ' Handle exception ...
        End Try
    End While
End Using
于 2012-12-28T16:00:52.320 回答