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