2013-07-13 69 views
0

我有50000記錄顯示在datagridview然後我想將它保存到數據庫,但它插入到SQL Server時非常緩慢。慢從數據gridview到SQL Server獲取數據

我的代碼:

For x As Integer = 0 To Me.DataGridView1.Rows.Count - 1 
       With DataGridView1 
         Insert into tbl1 values("&.Rows(x).Cells(0).Value&", ......) 
       End With 
    Next 

你有什麼辦法呢?

+1

入住這http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx –

+0

這【答案】(http://stackoverflow.com/questions/16530686/vb-net-insert-datagridview-contents-into-database)可能也有幫助 – rwisch45

回答

1

將許多記錄插入SQL Server表的一種快速方法是使用SqlBulkCopy類。

首先,您需要一個將DataGridView的內容複製到DataTable中的函數。

Private Function GetDataTable() As DataTable 
    Dim DataTable1 As New DataTable 

    Dim i1, i2, RowsCount1 As Integer 

    For i1 = 0 To DataGridView1.Columns.Count - 1 
     DataTable1.Columns.Add(DataGridView1.Columns(i1).Name, DataGridView1.Columns(i1).ValueType) 
    Next 

    If DataGridView1.AllowUserToAddRows = True Then 
     RowsCount1 = DataGridView1.Rows.Count - 1 
    Else 
     RowsCount1 = DataGridView1.Rows.Count 
    End If 

    For i1 = 0 To RowsCount1 - 1 
     DataTable1.Rows.Add(DataTable1.NewRow) 

     For i2 = 0 To DataGridView1.Columns.Count - 1 
      DataTable1.Rows(i1).Item(i2) = DataGridView1.Rows(i1).Cells(i2).Value 
     Next 
    Next 

    Return DataTable1 
End Function 

該DataTable將通過使用SqlBulkCopy類的WriteToServer方法插入到數據庫中。

以下代碼將提供的DataTable插入到數據庫中。

Private Sub SaveToDatabase(ByVal DataTable1 As DataTable) 
    Dim ConnectionStr1 As String = "Server=ServerAddress;Database=DataBaseName;User Id=Username;Password=Password;" 
    Dim SqlBulkCopy1 As New SqlClient.SqlBulkCopy(ConnectionStr1) 

    SqlBulkCopy1.DestinationTableName = "TableName" 

    SqlBulkCopy1.ColumnMappings.Add("SourceColumn1", "DestinationColumn1") 
    SqlBulkCopy1.ColumnMappings.Add("SourceColumn2", "DestinationColumn2") 
    SqlBulkCopy1.ColumnMappings.Add("SourceColumn3", "DestinationColumn3") 
    ' 
    ' 

    SqlBulkCopy1.WriteToServer(DataTable1) 
    SqlBulkCopy1.Close() 
End Sub 
+0

'dataType'參數不能爲空。 參數名稱:dataType –

+0

如果您提供了SQL Server字段的名稱和數據類型,我將能夠爲您提供幫助。編輯您的帖子並將其添加到那裏。 –