-1
这是存储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
这是数据层的代码
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;
}
}
执行存储过程时,它正确地返回“success”,但它返回-1作为数据层的结果,并且员工详细信息保存在数据库表中。什么想知道为什么应该总是-1作为结果?
你应该检查出[?我们可以停止使用AddWithValue()已经(http://blogs.msmvps.com/jcoehoorn/blog/2014/05/ 12/can-we-stop-using-addwithvalue-already /)并停止使用'.AddWithValue()' - 它可能会导致意外的和令人惊讶的结果... –
存储过程** always **返回一个'Int'作为其返回结果。通常,这用于指示成功或失败,或者在修改操作(插入,更新,删除)的情况下,传回的结果是受该操作影响的*行数*。这里 - 没有修改操作,所以默认情况下,存储过程返回-1(不修改行) –
因此,请改用输出参数或数据读取器。 – ATC