2014-12-02 21 views
0

找不到明確的答案,但我需要確定。我有以下代碼:Dim DataTable = DataSet.Tables(TableName) - 複製或引用?

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

如果您不確定,只需在dsMyInfo.Tables中添加它們後在dtMyInfo中計數行數 – 2014-12-02 16:50:30

+0

使用** [Is](http://msdn.microsoft.com/en-us/library/ kb136x1y.aspx)**運算符來比較引用。 'Dim result As Boolean =(table1 is table2)' – 2014-12-02 17:07:59

回答

1

DataTable是一個引用類型。您可以在documentation中看到這一點,語法部分顯示它是Class,而不是Structure。這意味着,當您進行分配時,dtMyInfo變量的值將是參考到內存中的實際DataTable對象,而不是對象本身。此時,使用變量的屬性和方法就像在內存中使用對象的屬性和方法一樣,因此向變量添加行會將這些行添加到內存中的對象。由於dsMyInfo.Tables(TableName)表達式引用相同的對象,所以新的行也將包括在這裏。

相關問題