vb.net oledbdataadapter将字段格式设置为整数而不是双精度

vb.net oledbdataadapter将字段格式设置为整数而不是双精度,vb.net,oledbdataadapter,Vb.net,Oledbdataadapter,我在VisualStudio2005中使用oledbdataadapter加载CSV文件。我遇到的问题是,如果任何给定字段的第一行的值为0,oledbdataadapter会将该字段转换为整数。它会将所有后续值舍入为一个整数,去掉小数点。作为测试,我使用记事本手动打开csv,将第一行更改为0.0,而不是仅0,然后文件正确打开,使字段成为双精度字段。打开CSV和格式字段以翻倍的正确方法是什么 以下是开场白: Sub LoadDB2Graph(ByVal DaFilename As String)

我在VisualStudio2005中使用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
子加载db2graph(ByVal DaFilename作为字符串)
Dim数据表为字符串
尝试
MyDataAdapter.Dispose()文件
dspresscope.Tables.Clear()
捕获e1作为例外
结束尝试
MySelectCommand.CommandText=“从[”&DaFilename&“]中选择*其中[Time]0”
MyDataAdapter.SelectCommand=MySelectCommand
尝试
调用DeleteTestLine(1)
调用DeleteTestLine(2)
DaTable=Replace(DaFilename,“.”,“389;”)
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=“按范围-”&DBDirectory&DaFilename
捕获e1作为例外
MessageBox.Show(“加载失败”)
结束尝试
LoadPens2List()
端接头

诀窍是使用文件schema.ini

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

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

[data.txt]
Format=Delimited(;)
MaxScanRows=0
Col1=ID Integer
Col2=ProductName Text Width 100
Col3=Price Double 
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

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

或者,您可以使用该类来加载CSV文件,而不是使用
OleDbDataAdapter
类。这样做将使您能够更好地控制整个过程

例如,您可以这样做:

[data.txt]
Format=Delimited(;)
MaxScanRows=0
Col1=ID Integer
Col2=ProductName Text Width 100
Col3=Price Double 
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

在使用MyDataAdapter.Fill之前,您是否尝试过使用MyDataAdapter.FillSchema(dsPressScope,SchemaType.Source,daTable)呢?我想答案在schema.ini中,但在打开它之前,我不知道字段是什么。你能在打开后更改它吗?另外,我有成百上千的csv文件分散在不同的PC和不同的目录中,文件不断添加。我必须为这些文件中的每个文件添加schema.ini吗?我在寻找更简单的东西…模式是从源代码读取的;不需要.ini文件。可以将其加载到数据集中吗?可以,可以创建一个新的空数据集,向其中添加一个新的DataTable,向表中添加列,然后使用这些列向表中添加行。