【问题标题】:Import large data from excel onto DataGridView and save into Database将大数据从excel导入DataGridView并保存到数据库
【发布时间】:2017-09-10 08:03:16
【问题描述】:

我在 excel 上有大约 12000 个数据,我需要导入到 DataGridView,然后将其保存到 SQL Server 数据库。

我面临的问题是将 excel 数据分解为 1000 个数据组,并将其保存到数据库中,这是显而易见的,UI 冻结。现在我什至无法想象一次导入所有 12000 条数据,上帝保佑我!

我怎样才能在没有冻结问题的情况下完成这项任务?我尝试搜索并找到了有关 DataGridView 虚拟模式属性的信息。我该如何正确实施,帮助我找到正确的方向。

【问题讨论】:

  • 你试过使用BackgroundWorker吗?它将帮助您的 UI 保持响应。 Have a look
  • @SDP,如果你使用线程会更好。
  • @MAdeelKhalid 我会调查一下,谢谢 :)
  • 为什么要将行导入网格?可以使用分页吗?
  • @FLICKER 我只需要将数据保存到数据库中,在 DGV 中显示只是为了查看。

标签: c# sql-server excel datagridview


【解决方案1】:

'库

Imports System.Data.SqlClient
Imports System.IO
Imports Microsoft.VisualBasic.FileIO
Imports System.Data
Imports System.Data.Odbc
Imports System.Data.OleDb

'加载数据网格视图

Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
    Dim cnn As SqlConnection
    Dim connectionString As String
    Dim sql As String

    connectionString = "data source=Excel-PC\SQLEXPRESS;" & _
    "initial catalog=NORTHWIND;Trusted_Connection=True"
    cnn = New SqlConnection(connectionString)
    cnn.Open()
    sql = "SELECT * FROM Orders"
    Dim dscmd As New SqlDataAdapter(sql, cnn)
    Dim ds As New DataSet
    dscmd.Fill(ds)
    DataGridView1.DataSource = ds.Tables(0)
    cnn.Close()

End Sub

' 从数据网格视图到 SQL 服务器

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click


    Dim headers = (From header As DataGridViewColumn In DataGridView1.Columns.Cast(Of DataGridViewColumn)() Select header.HeaderText).ToArray
    Dim rows = From row As DataGridViewRow In DataGridView1.Rows.Cast(Of DataGridViewRow)() Where Not row.IsNewRow Select Array.ConvertAll(row.Cells.Cast(Of DataGridViewCell).ToArray, Function(c) If(c.Value IsNot Nothing, c.Value.ToString, ""))
    Dim str As String = ""
    Using sw As New IO.StreamWriter("C:\Users\Excel\Desktop\OrdersTest.csv")
        sw.WriteLine(String.Join(",", headers))
        'sw.WriteLine(String.Join(","))
        For Each r In rows
            sw.WriteLine(String.Join(",", r))
        Next
        sw.Close()
    End Using

End Sub

我不明白为什么加载过程会导致您的机器死机。我以前从来没有遇到过这个问题。

如果您想要一种快速将数据加载到 SQL Server 的方法,只需使用批量插入并摆脱整个数据网格视图。

BULK INSERT EmployeeDB.dbo.Employees
FROM 'C:\Data\EmployeeData_c.dat'
WITH 
  (
    DATAFILETYPE = 'char',
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\r\n'
  );

https://www.simple-talk.com/sql/learn-sql-server/bulk-inserts-via-tsql-in-sql-server/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 2018-02-01
    • 2014-02-18
    相关资源
    最近更新 更多