Ausnahmebedingung bei Objekten
Annette
- asp.net
Hi, ich bekomme teilweise bei ADODB-Objekten (RecordSet, Connection und Field) und bei Com-Objekten eines 3.-Party-Produktes den Fehler "es ist eine Aufnahmebedingung aufgetreten". Es tritt nur bei 2 Seiten auf, alle anderen funktionieren problemlos. Und mal funktionierts aber meist kommt halt diese Exception...
Wer weiss Rat?
Gruss Annette
Codeschnippsel ADODB:
try {
//strConnection = "driver={SQL Server};server=ip-kennung;uid=user;pwd=password;database=Lagerjournal";
//connect.Open( strConnection);
msg = ""
connect = Server.CreateObject("ADODB.Connection");
connect.Open("BremerModell",user,password);
connect = "DSN=BremerModell;User Id=user;Password=password;"
recset = Server.CreateObject("ADODB.Recordset");
//for (n=0; n++; n<15) {
if (teil[n] !="") {
sql = "SELECT * FROM Lagerjournal.dbo.ETDIEBP WHERE ETNR='"+teil[n]+"'";
recset.open(sql,connect,adOpenKeyset,adLockReadOnly);
msg = "Query";
if (recset.BOF || recset.EOF) {
bez[n] = "ungültige Teilenr.";
}
else {
bez[n] = recset("ETBEZ").value;
}
}
//}
connect.close;
connect = null;
recset = null;
}
catch(e) {
msg = msg + e.description;
bez[n] = "z.Zt. nicht verfügbar";
//bez[n] = msg;
//Response.Write(recset.Source);
}
das COM-Objekt aus der third-party
//a = Server.CreateObject("deskodabremer.Auftragsanzeige");
a = new ActiveXObject("deskodabremer.Auftragsanzeige");
a.Host_User = "" + user;
a.HostPwd = "" + pwd;
abfrage = 0;
if (nummer != "") {
//Response.Write("nummer gefüllt");
a.AuftragsNummer = "" + nummer;
a.AuftragsStatus = " ";
a.AuftragsArt = " ";
abfrage = 1;
}
else {
//Response.Write("nummer nicht gefüllt");
a.AuftragsStatus = "" + status;
a.Auftragsart = "" + art;
a.AuftragsNummer = " ";
abfrage = 2;
}
result = -1;
msg =
try {
a.execute(); // localhost
//CmdManager.Execute(a); // server
//Response.Write("a.RESULT="+a.Result);
if (a.RESULT=="SUCCESS") {
result = 0;
Response.Write("a.RESULT="+a.Result);
}
}
catch (e) {
msg = e.description;
}
Hallo,
Immer schön der Reihe nach. Wenn dieser Fehler nur in zwei Seiten auftritt dann kann der Fehler auch nur in diesen zwei Seiten liegen. Ich war mal so frei deinen Code zu sortieren und würde nun von Dir gerne die Fehlermeldung wissen, anders macht das keinen Sinn.
...
var dbCon, dbRec, dbStr;
dbCon = Server.CreateObject("ADODB.Connection");
dbRec = Server.CreateObject("ADODB.Recordset");
dbCon.Open("DSN=BremerModell;UID=user;PSW=password;");
n = 0;
if (teil[n] != "")
{
dbStr = "SELECT * FROM Lagerjournal.dbo.ETDIEBP WHERE ETNR='" + teil[n] + "'";
dbRec.Open(dbStr, dbCon, 3, 3);
if (!dbRec.EOF)
bez[n] = dbRec.Fields("ETBEZ").Value;
else
bez[n] = "ungültige Teilenr.";
dbRec.Close();
}
dbCon.Close();
...
Teste das bitte so...
bernhard
Fehlermeldung von ASP:
"es ist eine Ausnahmebedingung aufgetreten"
Wenn ich öfter auf das Resultset zugreife, dann kommt dieser Fehler, es ist also eher die stelle, wo ich die Felder auslese.
Bei dem Com-Objekt tritt es bei dem execute auf ODER wenn ich auch hier das resultset öfter auslese.
Ich habe fast das Gefühl, dass es irgendwas mit dem Speicher zu tun hat... :-(
Hallo,
"es ist eine Ausnahmebedingung aufgetreten"
Mehr nicht? Das ist so allgemein und nichtssagend wie funzt net. Kein Fehlercode? Ist die Ausgabe von detailierten Fehlermeldungen in deiner Webapplikation aktiviert?
Wenn ja dann bleibt Dir nur noch übrig Konntrollausgaben zu generieren, um die letzte Aktion festzustellen. Z.B. den Connection-String oder die Werte des Recordsets. Es ist halt wichtig zu wissen wo man suchen muß. Vielleicht ist es ja auch das Array. Ein Fehlercode..., ein Königreich für einen Fehlercode..
Wenn es ein Speicherproblem ist, dann ist dies eigentlich ausreichend kommentiert wie "Stapelüberlauf (0107)", "Kein Speicher mehr (0100)" o.a. somit schließe ich das aus.
bernhard
habe ausführliche fehlermeldungen aktiviert...
da ich dieses problem eigentlich nur beim auslesen von recordsets auftritt, müsste eigentlich dort der hund begraben sein... liegt wohl doch an dem third-party-produkt... :-(
"es ist eine Ausnahmebedingung aufgetreten"
Mehr nicht? Das ist so allgemein und nichtssagend wie funzt net.
Kein Fehlercode? Ist die Ausgabe von detailierten Fehlermeldungen in deiner Webapplikation aktiviert?
mehr nicht... :-((((
Wenn ja dann bleibt Dir nur noch übrig Konntrollausgaben zu generieren, um die letzte Aktion festzustellen. Z.B. den Connection-String oder die Werte des Recordsets. Es ist halt wichtig zu wissen wo man suchen muß. Vielleicht ist es ja auch das Array. Ein Fehlercode..., ein Königreich für einen Fehlercode..
das klappt net...
bzw. es ist alles korrekt bis zum execute bzw. auslesen des Feldes. und es ist ja auch immer an unterschiedlichen stellen...
Wenn es ein Speicherproblem ist, dann ist dies eigentlich ausreichend kommentiert wie "Stapelüberlauf (0107)", "Kein Speicher mehr (0100)" o.a. somit schließe ich das aus.
hm... bin viel computerphänomenologie gewohnt - aber das hier ist bisher das schlimmste, was mir untergekommen ist...
selbst in php treten die gleichen probleme auf, es sei denn ich lese nur einen bruchteil des recordsets aus...
es wird wohl an dem 3.-party liegen, das wohl alles zerschießt...
Hallo,
da ich dieses problem eigentlich nur beim auslesen von recordsets auftritt, müsste eigentlich dort der hund begraben sein... liegt wohl doch an dem third-party-produkt... :-(
Das glaube ich nicht, denn Du schreibst im Eröffnungsthread, dass es nur Probleme mit zwei Seiten gibt und das es bei geringen Abfragen keine Probleme gibt. Daher glaube ich, dass es an der DB liegt bzw. an der Verbindung, ein TimeOut vielleicht. Und wenn ich den Code-Schnipsel so anschaue, dann würde ich die Verbindung auch mit adOpenStatic öffnen, denn was bringt dir hier ein adOpenKeyset? Nichts, außer eine höhere und unnütze Belastung.
bernhard