【发布时间】:2016-09-21 23:24:11
【问题描述】:
我在一个类中定义了一个数据表:
Public Shared Positions As DataTable
当我的主窗体加载时,我为 DataTable 创建结构,如下所示:
Function createTable()
' Function to create datatable structure
Dim table As New DataTable
' Define primary key
Dim keys(0) As DataColumn
Dim keyColumn As New DataColumn()
keyColumn.ColumnName = "hash"
keys(0) = keyColumn
' Define columns
table.Columns.Add(keyColumn)
table.Columns.Add("PositionX", GetType(String))
table.Columns.Add("PositionY", GetType(String))
table.Columns.Add("PositionZ", GetType(String))
return table
End Function
PositionX、PositionY 和 PositionZ 的值随时间变化,我想使用作为主键的 hash 值在 DataTable 中更新它们。
但是,我似乎无法正确使用语法。这篇文章 (https://msdn.microsoft.com/en-us/library/tat996zc.aspx) 表明这种方法可行:
Dim customerRow() As Data.DataRow
customerRow = DataSet1.Tables("Customers").Select("CustomerID = 'ALFKI'")
customerRow(0)("CompanyName") = "Updated Company Name"
customerRow(0)("City") = "Seattle"
但是将它应用到我的代码中:
' Get the row containing this object
Dim resultRow() As Globals.Positions.DataRow
resultRow= Globals.Positions.Tables("Positions").Select("hash = '44DE43AB'")
resultRow(0)("PositionX") = 123456789
resultRow(0)("PositionY") = 123456789
在前两行给出错误“Globals.Positions.DataRow not defined”和“Tables is not a member of DataTable”。
我需要做什么才能获得包含我正在查找的主键值的行,以便我可以更新某些列值?
【问题讨论】:
-
这些东西会进入数据库吗?那里有很多问题。
-
不,这只是为了保存我在内存中跟踪的对象的位置。当我与他们失去联系时,他们会在一段时间后被删除。
-
a) 在 Option Strict 下无法编译 - 该函数没有返回类型 b) 如果 X Y 和 Z 是数字,列不应该是字符串 c) 我们看不到
Globals.Positions.DataRow定义,但由于 DataRow 是一种类型,我怀疑你的意思是别的 d) ADataTable不包含Tables所以第二个与 (c) 大致相同 -
谢谢。 a)我该如何添加类型?由于每一列都有一个类型,我需要一个表吗? b) 是的,X、Y 和 Z 可能是数字类型,c & d) 我在上面链接的示例中工作,试图调整该示例中的代码到目前为止没有成功
-
PS 我正在尝试使用主键以避免遍历 DataTable 中的所有行,因为速度在此应用程序中至关重要。