【发布时间】:2016-05-30 16:45:22
【问题描述】:
我用 Oledb 写了一个简短的函数,它应该读取大量数据,但还有几个我无法解决的问题,它是关于在 sql 数据库中读取和插入分号分隔的数据
Private Function GetCSVFile(ByVal file As String) As DataTable
Try
Dim dt As New DataTable
Dim ConStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & TextBox1.Text & ";Extended Properties=""TEXT;HDR=Yes;FMT=Delimited"""
Dim conn As New OleDb.OleDbConnection(ConStr)
Dim da As New OleDb.OleDbDataAdapter("Select * from " & _table & ".csv", conn)
da.Fill(dt)
Application.DoEvents()
getData = dt
Catch ex As OleDbException
MessageBox.Show(ex.Message)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
Return getData
End Function
1。它读取整个文件,但我需要告诉函数它应该只读取 50.000 行并将它们传递给另一个函数 step for step,它应该在 for 循环中更好地工作,因为 jet oledb 不会读取大于 1 GB 的文件
- 我需要替换字符
但它通常只适用于字符串
-
我需要识别整数、双精度、字符串等数据类型。我的第一个想法是通过 sql 查询并通过 tryparse 检查表
Dim dtInserts As DataTable = db.GetDataTable("SELECT TOP 0 * FROM " & _table) 将 ListOfTypes 暗淡为新列表(System.Type) 对于 dtInserts.Columns 中的每个 _col 作为 DataColumn 暗淡 _type 作为 System.Type = _col.DataType ListOfTypes.Add(_type) 下一个 暗淡 _wert1 As String = "11.11.2011" Dim _type1 As System.Type = ListOfTypes.Item(1) If DateTime.TryParse(_wert1, New Date) Then 万一但仍然不确定它是否会起作用
所有已读取的数据都应编码在 1252 代码页中。 这个真的不行
有人知道可以做什么吗?
【问题讨论】:
-
请一次提出 1 个问题,将 4 个问题捆绑在一起会使发布简短答案的范围太广且太难。
-
#3 和#4 非常可行,#2 太模糊,没有样本数据,无法理解您要做什么,#1 可能可以原生完成取决于数据,否则您可能需要添加一个步骤。如果您将问题细化为不那么广泛的问题,您可能会在结束之前得到一些答案
-
你应该删除
Application.DoEvents()这一行——它会导致奇怪的事情发生。 -
如果需要解析CSV文件,可以使用CSV解析器。 TextFieldParser class 可能就足够了。那么您的程序将不受 JET 的限制。