在 VBA 中,定义一个数组非常简单,使用 ADO(一个简单的 accdb 表)读取记录集,然后使用记录集中的信息填充该数组。假设我有一个包含 3 列的表格,A 是日期,B 是人员姓名,C 是每个人一天中的步数。因为我们处理数字和字符串,所以定义一个变体数组很简单:
Dim RS_CON As Object, RS_DATA As Object
Dim connString as String, queryString as string
Dim OutputArr() as variant
Set RS_CON = CreateObject("ADODB.Connection")
Set RS_DATA = CreateObject("ADODB.Recordset")
RS_CON.Open connString
queryString="SELECT * FROM [TableName]"
RS_DATA.Open queryString, RS_CON, adOpenStatic, adLockOptimistic, adCmdText
OutputArr =RS_DATA.GetRows(RS_DATA.RecordCount)
生成的数组有 3 列和表的所有行,甚至没有指定数组的维度。此外,数组还保存各种数据类型。 但我该让谁在 VB.NET 中做同样的事情呢?
RS_CON = New OleDbConnection With {
.ConnectionString = ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" &
sourceFld & dbFileName & "; Persist Security Info=False;")
}
Try
dtSet = New DataSet
dtTables = dtSet.Tables
queryString = "SELECT * FROM [TableName];"
RS_CON.Open() '---> Open Connection To The DataBase File.
dtAdapt = New OleDbDataAdapter(queryString, RS_CON)
dtAdapt.Fill(dtSet)
Dim Y() As Array '---> DOES NOT WORK!!
RS_CON.Close()
感谢您提供任何提示/线索/指导。 斯特凡
您可以使用
DataRow.ItemArray
属性将行作为数组获取。
VB.NET 中不存在 Variant
,请使用 Object
代替。
我还建议填写
DataTable
而不是 DataSet
。
Dim connectionString = "Data Source=localhost;Timeout=10;Database=Junk;Integrated Security=True;"
Dim strSql As String = "SELECT [Id], [Code], [Value] FROM [Table1]"
Dim dtb As New DataTable
Using cnn As New SqlConnection(connectionString)
cnn.Open()
Using dad As New SqlDataAdapter(strSql, cnn)
dad.Fill(dtb)
End Using
cnn.Close()
End Using
Dim y() As Object = dtb.Rows(0).ItemArray