2012-12-28 21 views
0

我使用OleDbDataAdapter的Visual Studio 2005中我的問題是,如果在第一行的值是任意給定場的0,則轉換OleDbDataAdapter的這個加載CSV文件字段轉換爲整數。它會將所有後續值舍入爲一個除去小數點的整數。作爲測試,我手動打開了CSV用記事本,並改變了第一行到0.0,而不是隻是0,然後將該文件打開了正確製作領域中的兩倍。打開CSV和格式字段翻倍的正確方法是什麼?vb.net OleDbDataAdapter的格式字段爲整數,而不是雙

這裏是開放代碼:

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

您是否嘗試過使用MyDataAdapter.FillSchema(dsPressScope,SchemaType.Source,確定年代),你做MyDataAdapter.Fill權利之前? – APrough

+0

我認爲答案在schema.ini中,但我不知道在打開它之前字段將會是什麼。你打開它後能改變它嗎? – user1934573

+0

另外,我有成千上萬的csv文件分散在不同的PC和不同的目錄中,文件不斷添加。我是否必須經歷爲每個這些文件添加schema.ini的麻煩?我正在尋找更容易的東西... – user1934573

回答

0

訣竅是使用文件SCHEMA.INI

有了這個文件,微軟here文件格式,你可以指定一組信息以補充您的連接字符串時,文本司機參與了數據訪問操作

例如,你可以寫這樣的SCHEMA.INI:

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

這假定您的文本文件被稱爲Data.txt並由三列整數,文本和雙列組成。該文件應保存在文本文件所在的同一目錄中。

0

作爲替代方案,可以使用TextFieldParser類加載,而不是使用OleDbDataAdapter類CSV文件。這樣做可以讓您更好地控制整個過程。

舉例來說,你可以做這樣的事情:

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 
+0

你可以加載到數據集? – user1934573

+0

是的,您可以創建一個新的空DataSet,向其中添加一個新的DataTable,將列添加到表中,然後可以使用這些列向表中添加行。 –

相關問題