SqlDataReader ohne Begrenzung (top 100) führt zum crash
Markus Rewak
Hallo,könnt ihr mir sagen warum customize bei nachfolgendem code das System einfrieren lässt? Die Datensätze muss ich auf top 150 begrenzen, sonst hängt sich das System auf.
Selbst bei top 200 geht nichts mehr.
viele Grüße
Markus
Dim DR As System.Data.SqlClient.SqlDataReader = Nothing
Dim BP As SAPbobsCOM.BusinessPartners
Dim sSQL As String=""
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
'SQL statement muss auf 150 Datensätze begrenzt werden sonst stürtzt customize ab!!!!!!!!!!!!!!!!!!!!!
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ssql="select top 150 b1.cardcode, b1.cardname " _
& " from sbo_echt.dbo.ocrd b1 " _
& " where b1.cardtype='C'"
BP = SwissAddonFramework.B1Connector.GetB1Connector().Company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oBusinessPartners)
DR = SwissAddonFramework.B1Connector.GetB1Connector().ExecuteQuery(ssql)
Dim i As Integer=0
Dim sKey As String=""
Dim iRetval As Integer=0
Dim sErr As String=""
While dr.Read ()
Try
i=i+1
sKey = dr.GetString(0)
If BP.GetByKey(sKey) Then
iretval=bp.Remove ()
If iretval<>0 Then
SwissAddonFramework.B1Connector.GetB1Connector().Company.GetLastError (iretval, serr)
SwissAddonFramework.B1Connector.GetB1Connector().Application.MessageBox (serr)
Else
SwissAddonFramework.B1Connector.GetB1Connector().Application.SetStatusBarMessage ("i:" & i & " ; key=" & skey,,False)
End If
End If
catch ex as Exception
SwissAddonFramework.B1Connector.GetB1Connector().Application.MessageBox (ex.toString())
End Try
End While
Michael Egloff
Hallo Markus,versuch mal mittels Statusbar-Nachrichten rauszufinden, wo das System dann hängen bleibt.
Der Code sieht nicht allzu speicheraufwändig aus, werden ja einfach Geschäftspartner geladen und gelöscht.
Markus Rewak
hi,mittlerweile hat sich die Situation nicht gebessert. Muss bei Abfragen derart noch immer eine Begrenzung auf top 200 machen, sonst frierst coresuite und SAP ein.
Markus
Michael Egloff
Hallo Markus,du kannst veruschen, das Timeout höher zu setzen.
Etwa so:
System.Data.SqlClient.SqlCommand command = new System.Data.SqlClient.SqlCommand();
command.CommandTimeout = 1000;
command.CommandText = @"SELECT....";
using(System.Data.SqlClient.SqlDataReader DR = SwissAddonFramework.B1Connector.GetB1Connector().ExecuteQuery(command))
{
while(DR.Read())
{
// DO STUFF
}
}
Dann wartet das Statement für 1000 Sekunden, bevor es abbricht. Standarmässig sind 30 Sekunden.
Gruss,
Michael
Markus Rewak
Hallo Michael,das bringt leider auch nichts. Bereits nach dem 1. Datensatz friert mir coresuite ein.
Gruss
Markus
0
Please sign in to leave a comment.
Comments
0 comments