0

私はストアドプロシージャを持っています

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

本当に質問はありませんが、その場合、このクエリで成功したかどうか

フィールドが空の場合や値がある場合でも、この場合は成功します

しかし、私は将来の他のクエリのためにそれを必要とします...そしてまた、この場合、C#コードは、クエリの実行を要求していたことだけでなく、それが起こったことを意味します。

しかし、C#が使用または変換できる戻り値としてSQLサーバーから実際の回答を取得するにはBoolean

4

1 に答える 1

0

私はこれについて何かをすることができたので、SQLサーバーストアドプロシージャ内で条件を指定できます

OUTPUT変数(PARAMETER)を宣言してから

条件が満たされた場合は値を 1 に設定し、そうでない場合は -1 に設定します

次に、C#で次のように関数を設定します。この例では、出力パラメーターに名前が付けられています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

そのため、条件によって許可されている場合にのみ、必要なことを実行し、アクションを報告して、プログラムのコード ビハインドで処理できるようにします。

于 2012-10-23T11:24:28.460 に答える