0

第一次在这里海报。

所以,我有这个旧的 VB6 软件,它决定在插入表期间中断,返回错误“用户 'sa' 登录失败”。但是,在已经发生了不确定数量的插入之后,此错误需要一段时间才会发生。

所有这些插入都不会在事务期间发生。并且所说的表不是临时表(用#或##声明),也不是视图。应用程序中还有其他地方可以更多地使用数据库/连接。我们使用的是 SQL Server 2008 R2,通过 ADO 连接。

关于错误可能是哪里或什么的任何想法?是应用程序的问题吗?是不是数据库有问题?

更新:这是执行插入的代码部分

//gAdoVIN is our ADODB.Connection object, it opens once (when the app starts) and closes once (when the app closes)
For iRow = 1 To grdItens.LinhasPreenchidas - 1 //runs about 400~1000 times
    Dim sEstab() As String
    sEstab = Split(grdItens.TextMatrixO(iRow, iColCdEstab), ",")
    For iSplit = 0 To UBound(sEstab)
        If sEstab(iSplit) <> "" Then            
            GsSql = "Some query here"
            //b_SqlADO Opens records, and dispose it if necessary
            b_SqlADO GsSql, gAdoVIN, rcCot
            Do While Not rcCot.EOF //runs about 3 times
                GsSql = "Insert into " & sTabTemp & " (Some Fields) values (Some Values)"
                gAdoVIN_Execute GsSql //fails here after a while
                rcCot.MoveNext
             Loop

             cVlr = grdItens.TextMatrixO(iRow, iColValor) + ((grdItens.TextMatrixO(iRow, iColValor) * sicrAcrs_RelcSem) / 100)
             GsSql = "Some other query"
             b_SqlADO GsSql, gAdoVIN, rcTemp
             If rcTemp.EOF Then
                 rcTemp.AddNew
             End If
             //Updates some fields
             rcTemp.Update
        End If
    Next iSplit
Next iRow

以及 gAdoVIN_Execute 的代码

Public Sub gAdoVIN_Execute(sSql As String, Optional ByRef lRecordsAffected_LOG As Long = 0, Optional lOptions_LOG As Long = -1)
    //Some Log Operation

    //here is where the insert is executed
    gAdoVIN.EXECUTE sSql, lRecordsAffected_LOG, lOptions_LOG 

    //Another Log Operation
End Sub

更新2:当插入失败并返回错误时,再次运行它而不做任何其他事情不会失败。这是一种解决方法,所以它并没有完全解决问题,只是让它暂时起作用。

4

0 回答 0