Microsoft KB Archive/305346

= How To Copy DataRows Between DataTables by Using Visual Basic .NET =

Article ID: 305346

Article Last Modified on 5/13/2007

-

APPLIES TO


 * Microsoft ADO.NET 1.1
 * Microsoft ADO.NET 1.0
 * Microsoft Visual Basic .NET 2003 Standard Edition
 * Microsoft Visual Basic .NET 2002 Standard Edition

-



This article was previously published under Q305346





For a Microsoft Visual C# .NET version of this article, see 308909.

This article refers to the following Microsoft .NET Framework Class Library namespaces:
 * System.Data
 * System.Data.SqlClient

IN THIS TASK
SUMMARY
 * How to Copy DataRows Between DataTables
 * Additional Notes

REFERENCES



SUMMARY
This article demonstrates how to copy specific DataRow objects from one table to another by using the ImportRow method of the DataTable class.

back to the top

How to Copy DataRows Between DataTables
Before you use the ImportRow method, you must ensure that the target table has the identical structure as the source table. This sample uses the Clone method of DataTable class to copy the structure of the DataTable, including all DataTable schemas, relations, and constraints.

This sample uses the Products table that is included with the Microsoft SQL Server Northwind database. The first five rows are copied from the Products table to another table that is created in memory.  Create a new Visual Basic .NET Console Application. If the Code window is not open already, right-click Module1.vb in the Solution Explorer window, and click View Code. Delete all of the code from the Code window.  Copy the following code and paste it in the Code window: Imports System.Data Imports System.Data.SqlClient Module Module1

Sub Main Dim ds As DataSet = New DataSet Dim tblProducts As DataTable Dim tblProductsCopy As DataTable

Dim tblProductsCount As Integer Dim tblProductsCopyCount As Integer Dim i As Integer

'Change the connection string to your server. Dim conn As SqlConnection = New SqlConnection(&quot;Server=ServerName;database=Northwind;UID=;PWD=&quot;) 'Create the DataAdapter. Dim da As SqlDataAdapter = New SqlDataAdapter(&quot;Select * from products&quot;, conn) 'Fill the DataSet with data. da.Fill(ds, &quot;products&quot;)

tblProducts = ds.Tables(&quot;products&quot;) tblProductsCount = tblProducts.Rows.Count 'Write the number of rows in Products table to the screen. Console.WriteLine(&quot;Table tblProducts has &quot; & tblProductsCount.ToString & &quot; Rows&quot;)

'Loop through the top five rows and write the first column to the screen. For i = 0 To 4 Console.WriteLine(&quot;Row(&quot; & i.ToString & &quot;) = &quot; & tblProducts.Rows(i)(1)) Next

'The Clone method makes a copy of the table structure (Schema). tblProductsCopy = tblProducts.Clone 'Use ImportRow method to copy from Products table to its clone. For i = 0 To 4 tblProductsCopy.ImportRow(tblProducts.Rows(i)) Next

tblProductsCopyCount = tblProductsCopy.Rows.Count 'Write blank line. Console.WriteLine 'Write the number of rows in tblProductsCopy table to the screen. Console.WriteLine(&quot;Table tblProductsCopy has &quot; & tblProductsCopyCount.ToString & &quot; Rows&quot;)

'Loop through the top five rows and write the first column to the screen. For i = 0 To tblProductsCopyCount - 1 Console.WriteLine(&quot;Row(&quot; & i.ToString & &quot;) = &quot; & tblProductsCopy.Rows(i)(1)) Next

'This line keeps the console open until you press ENTER. Console.ReadLine

End Sub

End Module  Press the F5 key to build and run the project. Note that the program's output appears as follows in the Command window:

<pre class="fixed_text">Table tblProducts has 77 Rows Row(0) = Chai Row(1) = Chang Row(2) = Aniseed Syrup Row(3) = Chef Anton's Cajun Seasoning Row(4) = Chef Anton's Gumbo Mix

Table tblProductsCopy has 5 Rows Row(0) = Chai Row(1) = Chang Row(2) = Aniseed Syrup Row(3) = Chef Anton's Cajun Seasoning Row(4) = Chef Anton's Gumbo Mix

</li> When you are finished, press ENTER to close the Command window.</li></ol>

back to the top

Additional Notes
You can use the Copy method of a DataTable object to copy the entire DataTable: Dim MyDataRow As DataRow Dim DataTable1 As New DataTable Dim DataTable2 As New DataTable Dim DataView1 As New DataView Dim DataSet1 as New DataSet ' Copy the entire DataTable. Dim dataTable2 = dataTable1.Copy dataSet1.Tables.Add(dataTable2) You can also copy DataRow objects from the results of a filtered DataView class or from the results of a Select method. For example: 'Copy from the results of a Select method. For Each MydataRow In DataTable1.Select(&quot;Region = 'WA'&quot;) DataTable2.ImportRow(MyDataRow) Next MyDataRow

'Copy from the results of a DataView. DataView1 = DataTable1.DefaultView DataView1.RowFilter = &quot;Region = 'WA'&quot; For I = 0 To Dataview1.Count - 1 DataTable2.ImportRow(Dataview1.Item(I).Row) Next I back to the top

<div class="references_section">