Это хранимая procedure--Сохраненный результат prodecure всегда возвращают -1 в результате возврата
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
Это код в Datalayer
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
{ }
}
--Я также попытался это также , но показать тот же результат, как и выше ---
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;
}
}
При выполнении хранимой процедуры, это правильно возвращает «успех», но его возвращение -1 как результат в datalayer, а также данные о сотрудниках сохраняются в таблице базы данных. Что нужно знать, почему всегда должно быть результатом -1?
Вы должны проверить [? Можно ли прекратить использование AddWithValue() уже] (http://blogs.msmvps.com/jcoehoorn/blog/2014/05/ 12/can-we-stop-using-addwithvalue-уже /) и прекратить использование '.AddWithValue()' - это может привести к неожиданным и неожиданным результатам ... –
Хранимая процедура ** всегда ** возвращает 'Int' как результат его возвращения. Как правило, это используется для указания успеха или неудачи, или в случае модификации операций (вставка, обновление, удаление), возвращаемый результат - это * количество строк *, затронутых этой операцией. Здесь - нет никакой операции модификации, поэтому по умолчанию хранимая процедура возвращает -1 (без изменений строк) –
Так что вместо этого используйте выходной параметр или считыватель a.data. – ATC