Dim DataTable = DataSet.Tables(TableName) - 复制还是引用?

时间:2014-12-02 16:48:12

标签: sql vb.net reference

无法找到明确的答案,但我需要确定。我有以下代码:

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网站的任何地方都被提及作为参考。

1 个答案:

答案 0 :(得分:1)

DataTable是一种引用类型。您可以在documentation中看到这一点,语法部分将其显示为Class,而不是Structure。这意味着当您进行赋值时,dtMyInfo变量的值将是对内存中实际DataTable对象的引用,而不是对象本身。此时,使用变量的属性和方法就像在内存中使用对象的属性和方法一样,因此向变量添加行会将这些行添加到内存中的对象。由于dsMyInfo.Tables(TableName)表达式引用了同一个对象,因此新行也将包含在此处。