执行一个返回“已成功完成”线索的存储过程

时间:2012-10-21 21:27:51

标签: sql-server-2005 c#-4.0 return-value asp.net-4.0

我有一个存储过程

UPDATE tblTime
SET TimeOut = DATEADD(HOUR,8,TimeIn)
WHERE tId =
( 
   SELECT MAX(tId)
   FROM tblTime
   WHERE UserId = 3571
)

虽然毫无疑问,但在这种情况下,如果它在此查询中确实成功了

即使字段为空或有值, 在这种情况下它会成功

但我确实需要它以供将来的其他查询...而且,  在这种情况下,我希望C#代码报告 不仅是它要求查询执行 - 意味着它确实发生了,

但要从sql server获得实际答案  作为c#可以使用或转换为Boolean

的返回值

1 个答案:

答案 0 :(得分:0)

我已经设法对此做了一些事情,所以我可以在sql server stored proc

中指定一个条件

声明OUTPUT变量(PARAMETER)然后

如果条件满足则将其值设置为1,如果不满足则设置为-1

然后 在c#中设置如下函数 在此示例中,outpout参数名为ERROR

   public static int UpdateTblViaStoredPRoc(string SPname, int UserID)
        {
            int message = 0;
            using (SqlConnection con = new SqlConnection("server=(local);Initial Catalog=****DBNAME HERE***;Integrated Security=True"))
            {

                con.Open();

                SqlCommand cmd = new SqlCommand(SPname, con);

                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.AddWithValue("@Uid", UserID);

                cmd.Parameters.Add("@ERROR", SqlDbType.Int);

                cmd.Parameters["@ERROR"].Direction = ParameterDirection.Output;

                cmd.ExecuteNonQuery();

                 message =(int) cmd.Parameters["@ERROR"].Value;

                con.Close();
            }
            return message;
        }

存储过程然后总是遵循相同的模式

声明ERROR参数,设置条件以相应地输出ERROR:

ALTER PROCEDURE [dbo].[nameofProc]
@UId Int, @ERROR int OUT
AS

BEGIN    

SET NOCOUNT ON;

DECLARE @TimeOtVal varchar(50)
set @TimeOtVal = (SELECT CASE WHEN [TimeOut] IS NULL THEN '' ELSE CONVERT(NVARCHAR,[TimeOut]) END FROM tblTime WHERE tId = ( SELECT MAX(tId) FROM tblTime WHERE UserId = @UId))

IF (@TimeOtVal = '') -- condition for the update 

BEGIN -- now action is taken if condition is met

    SET NOCOUNT ON;
    UPDATE tblTime  SET TimeOut = DATEADD(HOUR,8,TimeIn) WHERE tId = ( SELECT MAX(tId) FROM tblTime WHERE UserId = @UId)        
         SET  @ERROR = 1
END
 else

     BEGIN -- Other wise , if condition isnot met 

         SET  @ERROR = -1

     END

END

所以只有你在条件允许的情况下才会做你想要的 然后报告操作,以便您可以在后面的程序代码中处理它。