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