0

Visual Studio 2005でoledbdataadapterを使用してCSVファイルをロードします。問題は、最初の行の値が任意のフィールドの0である場合、oledbdataadapterがこのフィールドを整数に変換することです。後続のすべての値は、小数点を削除した整数に丸められます。テストとして、メモ帳でcsvを手動で開き、最初の行を0ではなく0.0に変更すると、ファイルが正しく開かれ、フィールドがdoubleになりました。CSVを開き、フィールドを2倍にフォーマットする正しい方法は何ですか?

開始コードは次のとおりです。

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
4

2 に答える 2

0

トリックは、ファイルschema.iniを使用することです

このファイル (Microsoft によって文書化されている形式はこちら) を使用すると、データ アクセス操作にテキスト ドライバーが関係している場合に、接続文字列を補足する一連の情報を指定できます。

たとえば、次のように schema.ini を記述できます。

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

これは、テキスト ファイルが Data.txt という名前で、Integer、Text、Double の 3 つの列で構成されていることを前提としています。このファイルは、テキスト ファイルと同じディレクトリに保存する必要があります。

于 2012-12-28T14:08:46.123 に答える
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
于 2012-12-28T16:00:52.320 に答える