Hallo,
Ich hab da mal ein Problem... (ach nee...)
DB: SQL2k
Connection-Provider: SQLOLEDB
Folgende SP(vereinfacht) macht Probleme:
CREATE PROCEDURE dbo.InsertData
@data varchar(50)
AS
INSERT INTO Tabelle(data)VALUES(@data)
SELECT SCOPE_IDENTITY()
GO
Sie wird aufgerufen mit dieser Funktion:
<%
function ExecuteSP(name,par)
dim com
Set com = Server.CreateObject("ADODB.Command")
com.ActiveConnection = getConn()
com.CommandText = name
com.CommandType = adCmdStoredProc
Set ExecuteSP = com.Execute(,par)
end function
%>
Und zwar so:
<%
Set rs = ExecuteSP("InsertData",Array("123"))
Response.Write rs(0) '<=== Hier passiert der Fehler
%>
Der Fehler ist folgender:
ADODB.Recordset (0x800A0E78)
Operation is not allowed when the object is closed.
Was der Fehler bedeutet ist mir klar, ich verstehe bloss nicht, wieso er
auftaucht (jedenfalls nicht ganz)...
Nach weiteren rumprobieren fand ich heraus, dass das entfernen der
insert-Anweisung einen offenen Recordset �bergibt, der die selektierten
Daten enth�lt(also Null in diesem Fall, aber auch probehalber
zur�ckgegebene integers haben funktioniert...)
Beim Aufruf der unver�nderten SP im Query Analyzer bekomme ich das
recordset mit der identity zur�ckgeliefert und folgende messages:
(1 row(s) affected)
(1 row(s) affected)
Dies brachte mich auf die Idee, dass ADO vielleicht f�r beide
Anweisungen Recordsets zur�ckbekommt und das erstes eben geschlossen
ist, weil es von einem Update her stammt....
Also Flux dieses ausprobiert:
<%
Set rs = ExecuteSP("InsertData",Array("123"))
Set rs = rs.NextRecordset '<=== Hier passiert der Fehler
Response.Write rs(0)
%>
Jedoch gibt das den Fehler:
ADODB.Recordset (0x800A0CB3)
Current provider does not support returning multiple recordsets from a
single execution.
Hmmm... Was jetzt? Wie bekomme ich die IDENTITY von einer SP, die ein
update macht zur�ck?
Auch das zur�ckgeben per RETURN funktioniert nicht, da ich daf�r die
Parameter vor dem Aufruf definieren m�sste, dass mache ich aber nicht,
da ich die generische ExecuteSP-Funktion f�r alle Aufrufe benutze... Ein
Parameter Namens "@RETURN_VALUE" gibt es zwar standardm�ssig, das wird
aber nach dem Aufruf nicht gef�llt (Auch nicht, wenn die SP nur as dem
RETURN besteht).
Irgendjemand eine Idee?
Claudius
| [aspdedatabase] als [email protected] subscribed
| http://www.aspgerman.com/archiv/aspdedatabase/ = Listenarchiv
| Sie k�nnen sich unter folgender URL an- und abmelden:
| http://www.aspgerman.com/aspgerman/listen/anmelden/aspdedatabase.asp