vb.net oledbdataadapter将字段格式化为整数而不是double

时间:2012-12-28 13:37:42

标签: vb.net oledbdataadapter

我使用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

2 个答案:

答案 0 :(得分:0)

诀窍是使用文件 schema.ini

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

例如,您可以编写如下的schema.ini:

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

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

答案 1 :(得分: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