プロが教える店舗&オフィスのセキュリティ対策術

はじめまして。
今回の質問なのですが、ViewStateに更新日時を保持し、後で、排他処理のため、ストアドプロシージャーで排他処理をしたいと思っています。
とりあえず、Page_Load時に、「ViewState["haita"] = (DateTime)dtTemp.Rows[0]["更新日時"]」という風にdatatableから更新日時を取得します。そして、更新ボタンクリックで
「SqlParameter p11 = cmd.Parameters.Add("@haita",System.Data.SqlDbType.DateTime);
p11.Value = ViewState["haita"];」
としてストアドプロシージャーの中で排他処理を行いたいのですが、どうもViewStateでデータの比較ができてないみたいです。
ちなみにストアドの中身は、

CREATE PROCEDURE AA_Table
@haita datetime
AS
SELECT * FROM M_科目マスタ
WHERE コースコード=@couse
AND 科目コード=@k_kode
AND 年度=@nendo AND 年次=@nenji
AND 更新日時=@haita
IF @@ROWCOUNT<1
BEGIN
RETURN(-1)
END
ELSE
BEGIN
UPDATE M_科目マスタ
SET
科目名 = @k_name,
科目名略称 = @k_ryaku,
科目責任者 = @k_Person,
単位 = @tani,
更新日時 = @up,
更新ユーザー名 = @koushinsya
WHERE
コースコード = @couse AND 年度 = @nendo AND 年次 = @nenji AND 科目コード = @k_kode
RETURN(0)
END
GO
です。
どうやってもRETURN(-1)が返ってきてしまいます。
どなたか、参考になる意見お願いします!

A 回答 (2件)

ポイントですが、C#の問題というより、


SQL ServerのSQLの問題のような気がしてきました。

# 特に使用データベース製品名が記載されておりませんが、
 C#の使用している名前空間とストアドのSQLを見ている限り、
 SQL Serverとほぼ断定させて頂きましたが。

また、C#側でストアドの引数@haitaを渡すところは特に問題
なさそうなので、
まず、ストアドを下記のようにしてみてください。
(質問の分類がC#ではなく、SQL Serverの回答となってしまって申し訳ないのですが)

CREATE PROCEDURE AA_Table
@haita datetime
AS
declare @cnt int

SELECT @cnt = count(*) FROM M_科目マスタ
WHERE コースコード=@couse
AND 科目コード=@k_kode
AND 年度=@nendo AND 年次=@nenji
AND 更新日時=@haita

IF @cnt < 1
BEGIN
RETURN(-1)
END
ELSE
BEGIN
UPDATE M_科目マスタ
SET
科目名 = @k_name,
科目名略称 = @k_ryaku,
科目責任者 = @k_Person,
単位 = @tani,
更新日時 = @up,
更新ユーザー名 = @koushinsya
WHERE
コースコード = @couse AND 年度 = @nendo AND 年次 = @nenji AND 科目コード = @k_kode
RETURN(0)
END
GO

それでもダメなら、他の問題が考えられるため、別途、ご相談下さい。
    • good
    • 0

単純に、


p11.Value = ViewState["haita"];
が、

p11.Value = Convert.ToDateTime(ViewState["haita"]);
または、
p11.Value = (DateTime)ViewState["haita"];
または、
p11.Value = ViewState["haita"] as DateTime;

がすべき話ではないのでしょうか?
また、ViewState["haita"]の内容がNULLでないことをデバッグ
等で確認してみて下さい。
もし、NULLが入っているんであれば、
if ( ViewState["haita"] == null ) で事前チェックが必要な
気がします.....

この回答への補足

やはり駄目でした。
データベースに更新日時を登録する時、というのがおかしいのでしょうか?

SqlParameter p9 = cmd.Parameters.Add("@up",System.Data.SqlDbType.DateTime);
p9.Value = DateTime.Now;

補足日時:2007/08/20 09:59
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!