Forum: C# |
Thema:
Falscher Rückgabewert von der StoredProcedure |
Von:
Markus Peklo (
24.08.2006 14:25) |
Hallo ich hab folgende StoredProcedure:
PROCEDURE dbo.prcEklNew
@MaId int, @Bez varchar(255), @PersId int,
@LfId int = -1, @KdNrId int = -1, @MaAdrIdLa int = -1,
@EklId int = -1 OUTPUT, @ErrMsg varchar(255) = '' OUTPUT
AS
SET NOCOUNT ON
DECLARE @DatTmp smalldatetime
DECLARE @EklNrLfd int
DECLARE @EklNr varchar(10)
DECLARE @Err int
BEGIN TRANSACTION
-- Neue Einkaufslistennummer ermitteln
SET @DatTmp = getdate()
-- BE + YY + KW
SET @EklNr = 'EK' + RIGHT(datepart(yy, @DatTmp),2) + RIGHT(dbo.fnGetKw(@DatTmp)+100, 2)
-- Nächste fortlaufende Nummer innerhalb der aktuellen KW
SELECT @EklNrLfd = ISNULL(MAX(CONVERT(int, RIGHT(EklNr, 4))),0) + 1 FROM dbo.tblEkl WHERE LEFT(EklNr,6) = @EklNr
-- Fortlaufende Nummer 4-stellig
SET @EklNr = @EklNr + RIGHT(@EklNrLfd + 10000, 4)
-- Einkaufsliste einfügen
INSERT INTO dbo.tblEkl (MaId, EklNr, LfId, KdNrId,
MaAdrId, Bez, PersIdBs, SysAddUser, SysAddDat)
VALUES (@MaId, @EklNr, CASE WHEN @LfId = -1 THEN NULL ELSE @LfId END, CASE WHEN @KdNrId = -1 THEN NULL ELSE @KdNrId END,
CASE WHEN @MaAdrIdLa = -1 THEN NULL ELSE @MaAdrIdLa END, @Bez, @PersId, @PersId, getdate())
SET @Err = @@ERROR
IF (@Err=0) BEGIN
-- Erzeugte ID zurückliefern
SET @EklId = @@IDENTITY
SET @ErrMsg ='Alles bestens gelaufen!'
COMMIT TRANSACTION
END ELSE BEGIN
-- Fehler zurückgeben
SET @ErrMsg = 'Fehler beim Anlegen der Einkaufsliste.'
SET @EklId = 0
ROLLBACK TRANSACTION
END
Wenn ich sie im SQL2005 Server oder in VisualStudio 2005 direkt ausführe funktioniert alles wunderbar!
Wenn ich sie jetzt hingegen über den folgenden Code aufrufe dann bekommen ich 0 von @ELKId zurück und null von @ErrMsg.
SqlCommand cmd = new SqlCommand();
int intEKLId = -1;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "prcEklNew";
cmd.Parameters.Add(new SqlParameter("@MaID", (Int32)Session["MaId"]));
cmd.Parameters.Add(new SqlParameter("@Bez", (String)Session["EKLBez"]));
cmd.Parameters.Add(new SqlParameter("@PersId", (Int32)Session["PersID"]));
//Rückgabeparameter"bekannt machen"
cmd.Parameters.Add(new SqlParameter("@EklId", SqlDbType.Int));
cmd.Parameters["@EklId"].Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add(new SqlParameter("@ErrMsg", SqlDbType.Int));
cmd.Parameters["@ErrMsg"].Direction = ParameterDirection.ReturnValue;
cmd.Connection = basDbComm.getCnn();
cmd.Connection.Open();
cmd.ExecuteReader();
// Komfortfunktion übernimmt das Öffnen und Schlissen
//intEKLId = basDbComm.executeNonQuery(cmd);
intEKLId = (int)cmd.Parameters["@EklId"].Value;
String strRzID = (string)cmd.Parameters["@ErrMsg"].Value;
// Sauber schlissen
cmd.Connection.Close();
Die neue EKL wird angelegt... die ganze Funktion läuft einwandfrei durch aber die Rückgabeparameter stimmen einfach nicht:(
Ich verzweifel daran, weil ich eigentlcih haargenau die gleiche Funktion in einem anderen Projekt auch schon verwendet habe und dort geht alles.
Markus
Betreff |
Von |
Datum |
|
|
Tobi
Ulm
|
28.08.2006 11:00 |
|
|
AW: AW: Falscher Rückgabewert von der...
Jo danke daran lags... hab daran schon garnicht mehr gedacht, weil ich an einem andern Teil des Porjektes gearbeitet habe...<br><br>Viel dank für den Tip hätte ich auch selber drauf kommen können. <br><br> |
|
|
|
|
|
Markus
Peklo
|
28.08.2006 16:15 |
|
|
Antworten
Vorsicht bei der Eingabe: Die Zeichen ' oder -- sind nicht erlaubt!