通过vb.net对mysql进行大量插入超时

时间:2018-04-26 20:55:39

标签: vb.net

我有一个奇怪的问题,当我尝试导入大量记录时,我在大约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

1 个答案:

答案 0 :(得分:0)

最后的问题与参数集合的Add vs AddwithValue甚至是MYSQL连接的实际TimeOut无关。问题是VB.NET不喜欢Task运行那么久(超过60秒)。所以坚持使用 Application.DoEvents()修复了这个问题,但因为这不是我实现修复问题的 BackgroundWorker1.RunWorkerAsync()的最佳方式。