我寫了一個函數讀取CSV文件,並相應parametrizes過的,所以我有一個功能gettypessql起初查詢SQL表得到的數據類型,因此調整列後來插入到sql中。所以我的問題是,當我在Jet OLE DB中設置HDR = Yes時,我只得到像F1,F2,F3這樣的列名。爲了避免這個問題,我設置了HDR = No,並且寫了一些for循環,但現在我只得到空字符串,實際上是什麼問題?這裏是我的代碼:獲得列名的Jet OLE DB在vb.net
Private Function GetCSVFile(ByVal file As String, ByVal min As Integer, ByVal max As Integer) As DataTable
Dim ConStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & TextBox1.Text & ";Extended Properties=""TEXT;HDR=NO;IMEX=1;FMT=Delimited;CharacterSet=65001"""
Dim conn As New OleDb.OleDbConnection(ConStr)
Dim dt As New DataTable
Dim da As OleDb.OleDbDataAdapter = Nothing
getData = Nothing
Try
Dim CMD As String = "Select * from " & _table & ".csv"
da = New OleDb.OleDbDataAdapter(CMD, conn)
da.Fill(min, max, dt)
getData = New DataTable(_table)
Dim firstRow As DataRow = dt.Rows(0)
For i As Integer = 0 To dt.Columns.Count - 1
Dim columnName As String = firstRow(i).ToString()
Dim newColumn As New DataColumn(columnName, mListOfTypes(i))
getData.Columns.Add(newColumn)
Next
For i As Integer = 1 To dt.Rows.Count - 1
Dim row As DataRow = dt.Rows(i)
Dim newRow As DataRow = getData.NewRow()
For j As Integer = 0 To getData.Columns.Count - 1
If row(j).GetType Is GetType(String) Then
Dim colValue As String = row(j).ToString()
colValue = ChangeEncoding(colValue)
colValue = ParseString(colValue)
colValue = ReplaceChars(colValue)
newRow(j) = colValue
Else
newRow(j) = row(j)
End If
Next
getData.Rows.Add(newRow)
Application.DoEvents()
Next
Catch ex As OleDbException
MessageBox.Show(ex.Message)
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
dt.Dispose()
da.Dispose()
End Try
Return getData
End Function
,並得到類型的SQL,這一個不正確轉換,尤其是雙打
Private Sub GetTypesSQL()
If (mListOfTypes Is Nothing) Then
mListOfTypes = New List(Of Type)()
End If
mListOfTypes.Clear()
Dim dtTabelShema As DataTable = db.GetDataTable("SELECT TOP 0 * FROM " & _table)
Using dtTabelShema
For Each col As DataColumn In dtTabelShema.Columns
mListOfTypes.Add(col.DataType)
Next
End Using
End Sub
連接字符串的「HDR = Yes」部分是第一行是否有列名(而不是您是否要使用這些名稱)。如果您在沒有標題時使用YES,則會跳過一行。有幾種方法可以覆蓋和指定要使用的列名,也可以使用一種更簡單的方式指定類型,而無需解析和轉換。我只是不確定問題是什麼。 – Plutonix
..此外,是代碼意味着作用於一個特定的文件表對,或者你是否試圖編寫一個通用的csv到表處理器? – Plutonix
好吧,實際上它應該處理所有的csv文件,但我發現文件包含一些錯誤。但無論如何,當我運行該程序時,它並沒有真正將所有列正確轉換爲特定類型,例如,它將double轉換爲數據,原因不明 – Sparkm4n