无法找到明确的答案,但我需要确定。我有以下代码:
Dim daMyInfo As New SqlDataAdapter("select * from [" & TableName & "] (nolock)", objConn)
Dim dsMyInfo As New DataSet("MyInfo")
...
daMyInfo.FillSchema(dsMyInfo, SchemaType.Source, TableName)
daMyInfo.Fill(dsMyInfo, TableName)
Dim dtMyInfo As DataTable = dsMyInfo.Tables(TableName)
稍后在代码中,我得到了:
For Each NewRow As DataRow In dtMyInfoAdd.Rows
dtMyInfo.ImportRow(NewRow)
Next
Dim objCommandBuilder As New SqlCommandBuilder(daMyInfo)
daMyInfo.Update(dsMyInfo, TableName)
我假设这意味着dtMyInfo
实际上只是指向与dsMyInfo.Tables(TableName)
相同的对象,但我不确定,而且我更不确定因为我没有找到这个在MS网站的任何地方都被提及作为参考。
答案 0 :(得分:1)
DataTable是一种引用类型。您可以在documentation中看到这一点,语法部分将其显示为Class
,而不是Structure
。这意味着当您进行赋值时,dtMyInfo
变量的值将是对内存中实际DataTable对象的引用,而不是对象本身。此时,使用变量的属性和方法就像在内存中使用对象的属性和方法一样,因此向变量添加行会将这些行添加到内存中的对象。由于dsMyInfo.Tables(TableName)
表达式引用了同一个对象,因此新行也将包含在此处。