Dies ist die procedure--Das gespeicherte prodecure Ergebnis zurückgeben wird immer -1 im Rückergebnis
ALTER PROCEDURE [dbo].[EMPLOYEE_DETAILS_ADD_NEW]
@EMPLOYE_NAME VARCHAR(50),
@EMPLOYE_ADDRESS VARCHAR(100),
@EMPLOYE_PHONE VARCHAR(50),
@EMPLOYE_EMAIL VARCHAR(100),
@EMPLOYE_STATUS INT
AS
BEGIN
BEGIN TRY
BEGIN TRAN
SET NOCOUNT ON;
IF NOT EXISTS(SELECT 1 FROM EMPLOYE_DETAILS
WHERE (EMPLOYE_NAME = @EMPLOYE_NAME AND EMPLOYE_STATUS <> 3))
BEGIN
-- Insert statements for procedure here
INSERT INTO EMPLOYE_DETAILS (EMPLOYE_NAME, EMPLOYE_ADDRESS, EMPLOYE_PHONE, EMPLOYE_EMAIL, EMPLOYE_STATUS)
VALUES (@EMPLOYE_NAME, @EMPLOYE_ADDRESS, @EMPLOYE_PHONE, @EMPLOYE_EMAIL, @EMPLOYE_STATUS)
SELECT 'SUCCESS' AS result
END
ELSE
BEGIN
SELECT 'EXIST' AS result
END
COMMIT TRAN
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRAN
SELECT 'FAIL' AS result
END CATCH
END
gespeichert
Dies ist der Code in data
public string EmployeDetailsAdd(EmployeInfo info)
{
try
{
SqlCommand cmd = new SqlCommand("EMPLOYEE_DETAILS_ADD_NEW", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@EMPLOYE_NAME", info.EMPLOYE_NAME);
cmd.Parameters.AddWithValue("@EMPLOYE_ADDRESS", info.EMPLOYE_ADDRESS);
cmd.Parameters.AddWithValue("@EMPLOYE_PHONE", info.EMPLOYE_PHONE);
cmd.Parameters.AddWithValue("@EMPLOYE_EMAIL", info.EMPLOYE_EMAIL);
cmd.Parameters.AddWithValue("@EMPLOYE_STATUS", info.EMPLOYE_STATUS);
con.Open();
string result = cmd.ExecuteNonQuery().ToString();
con.Close();
return result.ToString() ;
}
catch(Exception ee)
{
throw ee;
}
finally
{ }
}
-I auch schon versucht, diese auch , aber wie oben das gleiche Ergebnis zeigen ---
public string EmployeDetailsAdd(EmployeInfo info)
{
try
{
SqlParameter[] parameter = new SqlParameter[5];
parameter[0] = PrepareParameter("@EMPLOYE_NAME", SqlDbType.VarChar, ParameterDirection.Input,info.EMPLOYE_NAME);
parameter[1] = PrepareParameter("@EMPLOYE_ADDRESS", SqlDbType.VarChar, ParameterDirection.Input, info.EMPLOYE_ADDRESS);
parameter[2] = PrepareParameter("@EMPLOYE_PHONE", SqlDbType.VarChar, ParameterDirection.Input, info.EMPLOYE_PHONE);
parameter[3] = PrepareParameter("@EMPLOYE_EMAIL", SqlDbType.VarChar, ParameterDirection.Input, info.EMPLOYE_EMAIL);
parameter[4] = PrepareParameter("@EMPLOYE_STATUS", SqlDbType.VarChar, ParameterDirection.Input, info.EMPLOYE_STATUS);
object result = ExecuteScalar("EMPLOYEE_DETAILS_ADD_NEW", CommandType.StoredProcedure, parameter);
return result.ToString();
}
catch (Exception ex)
{
throw ex;
}
}
Wenn die gespeicherte Prozedur ausgeführt wird, ist es richtig zurückgibt „Erfolg“, aber es Rückkehr -1 als Ergebnis im Datenlayer und auch die Mitarbeiterdetails werden in der Datenbanktabelle gespeichert. Was willst du wissen warum sollte immer -1 als Ergebnis?
Sie sollten überprüfen, [? Können wir AddWithValue() bereits nicht mehr verwenden] (http://blogs.msmvps.com/jcoehoorn/blog/2014/05/ 12/can-we-stop-using-addwithvalue-already /) und hört mit '.AddWithValue()' auf - es kann zu unerwarteten und überraschenden Ergebnissen führen ... –
Eine gespeicherte Prozedur ** always ** gibt ein 'Int' zurück als sein Ergebnis. In der Regel wird dies verwendet, um Erfolg oder Misserfolg anzuzeigen, oder im Falle von Modifizierungsvorgängen (Einfügen, Aktualisieren, Löschen) ist das zurückgegebene Ergebnis die * Anzahl der Zeilen *, die von dieser Operation betroffen sind. Hier - es gibt keine Modifizierungsoperation, daher gibt die gespeicherte Prozedur standardmäßig -1 zurück (keine Zeilen geändert) –
Verwenden Sie stattdessen einen Ausgabeparameter oder einen Datenleser. – ATC