我有一个存储过程
UPDATE tblTime
SET TimeOut = DATEADD(HOUR,8,TimeIn)
WHERE tId =
(
SELECT MAX(tId)
FROM tblTime
WHERE UserId = 3571
)
虽然毫无疑问,但在这种情况下,如果它在此查询中确实成功了
即使字段为空或有值, 在这种情况下它会成功
但我确实需要它以供将来的其他查询...而且, 在这种情况下,我希望C#代码报告 不仅是它要求查询执行 - 意味着它确实发生了,
但要从sql server获得实际答案
作为c#可以使用或转换为Boolean
答案 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
所以只有你在条件允许的情况下才会做你想要的 然后报告操作,以便您可以在后面的程序代码中处理它。