【发布时间】:2017-09-08 05:47:58
【问题描述】:
我想问一下,在插入来自数据网格的所有数据时,我是否可以提高速度。
例如:
我目前有 10,000 条数据需要插入数据库 sql server。 现在,我想将所有数据插入数据库。 但是我觉得会很慢。 不使用for循环可以吗?
Dim chk_cmd As SqlCommand
Dim chk_con As SqlConnection
Dim checker As SqlDataReader
Dim chkint As Integer = 0
Dim constring As String = "Data Source=exmag\sqlexpress;Initial Catalog=Stock;Integrated Security=true;"
Try
For Each row As DataGridViewRow In DataGridView1.Rows
chk_con = New SqlConnection(constring)
chk_con.Open()
chk_cmd = New SqlCommand("SELECT stockId FROM stock WHERE stockId = '" & row.Cells("stockId").Value & "'", chk_con)
checker = chk_cmd.ExecuteReader(CommandBehavior.CloseConnection)
If checker.HasRows Then
chkint += 1
Else
Using con_insert As New SqlConnection(constring), cmd_insert As New SqlCommand("INSERT INTO stock VALUES(@stockId,@id_android,@itemCode,@quantity)", con_insert)
cmd_insert.Parameters.AddWithValue("@stockId", row.Cells("stockId").Value)
cmd_insert.Parameters.AddWithValue("@id_android", row.Cells("id_android").Value)
cmd_insert.Parameters.AddWithValue("@itemCode", row.Cells("itemCode").Value)
cmd_insert.Parameters.AddWithValue("@quantity", row.Cells("quantity").Value)
con_insert.Open()
cmd_insert.ExecuteNonQuery()
con_insert.Close()
End Using
End If
Next
Catch ex As SqlException
If ex.Number.Equals(2627) Then
MsgBox("Primary Key DUPLICATED/Some Data are currently in the table.")
End If
End Try
MsgBox(chkint & " Data has duplicated primary key!")
【问题讨论】:
-
你当然不应该使用循环。您应该有一个包含数据的
DataTabl;e,然后根据具体情况,使用SqlDataAdapter或SqlBulkCopy插入数据。后者速度更快,但有局限性。我的问题是,您最初是如何在DataGridView中获得 10,00 条记录的?肯定是用户没有手动输入它们,所以它们来自哪里? -
它们来自在线托管数据库。我把它放在表单加载中
-
我一直在寻找一个可以将所有数据表的数据插入数据库的示例。但是还是找不到
标签: sql-server vb.net