我有一个奇怪的问题,当我尝试导入大量记录时,我在大约1000条记录后不久就会超时。我的程序读取一个文本文件解析它,然后行调用数组插入行调用。所以希望有人能告诉我可能导致这个问题的原因。
Using con As New MySqlConnection(myConnectionString)
Dim cmd = New MySqlCommand()
Dim RowsEffected As Int32
Try
con.Open()
cmd.CommandTimeout = 0
cmd.CommandText = "sp_msag_insert"
cmd.Connection = con
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.AddWithValue("@p_FOC", Trim(myData.FOC)) ' <FOC:char(1)>
cmd.Parameters.AddWithValue("@p_PRD", Trim(myData.PRD)) ' <PRD:varchar(2)>
cmd.Parameters.AddWithValue("@p_STN", Trim(myData.STN)) ' <STN:varchar(60)>
cmd.Parameters.AddWithValue("@p_STS", Trim(myData.STS)) ' <STS:varchar(4)>
cmd.Parameters.AddWithValue("@p_POD", Trim(myData.POD)) ' <POD:varchar(2)>
cmd.Parameters.AddWithValue("@p_LOR", Trim(myData.LOR)) ' <LOR:varchar(10)>
cmd.Parameters.AddWithValue("@p_HIR", Trim(myData.HIR)) ' <HOR:varchar(10)>
cmd.Parameters.AddWithValue("@p_MCN", Trim(myData.MCN)) ' <MCN:varchar(32)>
cmd.Parameters.AddWithValue("@p_PCN", Trim(myData.PCN)) ' <PCN:varchar(32)>
cmd.Parameters.AddWithValue("@p_STA", Trim(myData.STA)) ' <STA:varchar(2)>
cmd.Parameters.AddWithValue("@p_OEN", Trim(myData.OEN)) ' <OEN:varchar(1)>
cmd.Parameters.AddWithValue("@p_ESN", Trim(myData.ESN)) ' <ESN:varchar(5)>
cmd.Parameters.AddWithValue("@p_CPD", Trim(myData.CPD)) ' <CPD:varchar(10)>
cmd.Parameters.AddWithValue("@p_PSI", Trim(myData.PSI)) ' <PSI:varchar(4)>
cmd.Parameters.AddWithValue("@p_COI", Trim(myData.COI)) ' <COI:varchar(5)>
cmd.Parameters.AddWithValue("@p_EXC", Trim(myData.EXC)) ' <EXC:varchar(4)>
cmd.Parameters.AddWithValue("@p_TAR", Trim(myData.TAR)) ' <TAR:varchar(6)>
cmd.Parameters.AddWithValue("@p_SRT", Trim(myData.SRT)) ' <SRT:varchar(11)>
cmd.Parameters.AddWithValue("@p_GU1", Trim(myData.GU1)) ' <GU1:varchar(60)>
cmd.Parameters.AddWithValue("@p_GU2", Trim(myData.GU1)) ' <GU2:varchar(60)>
cmd.Parameters.AddWithValue("@p_GU3", Trim(myData.GU1)) ' <GU3:varchar(60)>
cmd.Parameters.AddWithValue("@p_GU4", Trim(myData.GU1)) ' <GU4:varchar(60)>
RowsEffected = cmd.ExecuteNonQuery()
cmd.Dispose()
con.Close()
con.Dispose()
If RowsEffected = 1 Then
Return True
Else
Return False
End If
Catch ex As MySqlException
Console.WriteLine("Database Error:[" & ex.Message & "]")
Return False
cmd.Dispose()
con.Close()
con.Dispose()
End Try
End Using
End Function
答案 0 :(得分:0)
最后的问题与参数集合的Add vs AddwithValue甚至是MYSQL连接的实际TimeOut无关。问题是VB.NET不喜欢Task运行那么久(超过60秒)。所以坚持使用 Application.DoEvents()修复了这个问题,但因为这不是我实现修复问题的 BackgroundWorker1.RunWorkerAsync()的最佳方式。