【问题标题】:Slow get data from data gridview into SQL Server从数据网格视图中获取数据到 SQL Server 的速度很慢
【发布时间】:2013-07-14 02:08:30
【问题描述】:

我有 50000 条记录要显示在 datagridview 上,然后我想将其保存到数据库中,但插入 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

你有什么解决办法吗?

【问题讨论】:

标签: vb.net


【解决方案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

【讨论】:

  • 'dataType' 参数不能为空。参数名称:dataType
  • 如果您提供 SQL Server 字段的名称和数据类型,我将能够为您提供帮助。编辑您的帖子并将它们添加到那里。
猜你喜欢
  • 2012-08-08
  • 1970-01-01
  • 1970-01-01
  • 2012-06-25
  • 1970-01-01
  • 2019-11-30
  • 2012-08-15
  • 2014-11-27
  • 2021-03-23
相关资源
最近更新 更多