プロが教えるわが家の防犯対策術!

開発環境:MS VisualStudio 2008
MS SQLserver 2005

ASP.NETで出退勤管理システムの開発をしております。
GridViewコントロールの編集ボタンについて質問です。

GridViewコントロールの編集ボタンを利用するには、
aspxファイルのデータソースのところにUPDATEコマンドを設定するかと思うのですが、

Updatecommand="Update [timecard] Set"
+ "[DATE]=@DATE"
+ ",[SYUKKIN]=@SYUKKIN"
+ ",[TAIKIN]=@TAIKIN"
+ ",[REST]=@REST"
+ ",[ZITUDOU]=@ZITUDOU"
+ ",[S_BIKOU]=@S_BIKOU"
+ ",[T_BIKOU]=@T_BIKOU"
+ ",[SUBMIT_DATE]=@SUBMIT_DATE"
+ ", [AMEND_DATE]= <%$DateTime.Now.ToShortDateString %>" //←これ
+ " ,[ADMIT]=@ADMIT "
+ "where [NAME]=@NAME"

こんな風にAMEND_DATEには毎回、編集した時間を入れていきたいのです。

…が、実行時に「'<' 付近に不適切な構文があります」と怒られてしまいます。
<%$ ~~ %>があやしいんじゃないかなというのは思うのですが、自分ではわかりません。。
どなたかわかる方いらっしゃいましたらお教えください。
よろしくお願いします!
説明不足でしたら補足しますので、おっしゃってください。

A 回答 (3件)

> コードを記述してるのは隠してるほう(aspx.cs)ではなくaspxファイルのほうです。


 う~ん、それはまぁそうなんだろうけど、いずれにせよ、「Updatecommand="Update [timecard] Set"」ってのは「変数Updatecommandに文字列を設定する」っていう文な訳で、すなわちここが正しく実行されている(エラーが出るのだって「実行」された結果だ)時点でここ自身が既にスクリプトレットなのです。なので、HTML文書の中でスクリプトレットに切り替えるタグである「<%= %>」をここでは使ってはいけないという事。

> SQLに任せるというのはストアドプロシージャを使うということですか??
SQL Serverには、ストアドプロシージャの他に関数という機能もある。
では、osql.exeなどでSQL Serverに繋いでみましょう。そこで下のSQLを発行すると・・・・。

select GetDate()

なんと、日付(SQL Serverが実行されているマシンの現在日付)がSelectされる。これを応用すると、日付をaspx側じゃなくてSQL Server側で計算させる事ができる。詳しくはGetDateで検索すると良いでしょう。

IsNullなんかも有名な関数だ。

select IsNull(COLUMN1, 'カラム1はNullです') from TABLE1

これはCOLUMN1がNullなら後ろの文字、そうで無ければ値そのものが返るものだ。
    • good
    • 0
この回答へのお礼

返事が遅くなってしまい申し訳ありません。

select GetDate()で無事解決できました。

改めて自分の勉強不足を実感しました。
もっともっと知識を蓄えていこうと思います。

ありがとうございました。

お礼日時:2008/06/06 13:53

日本人じゃない。


+ ", [AMEND_DATE]= <%$DateTime.Now.ToShortDateString %>" //←これ
これは以下に変換すればどうですか
+ ", [AMEND_DATE]='"+" <%$DateTime.Now.ToShortDateString %>"+"'" //←これ
    • good
    • 0
この回答へのお礼

GetDate()で無事解決できました!
ご回答ありがとうございました。

お礼日時:2008/06/06 13:54

ASP.NETはあんまりやった事ないからよくわかんないけど、


+ ", [AMEND_DATE]= <%$DateTime.Now.ToShortDateString %>" //←これこれって「文字列の一部」な訳でしょ? ここって・・・・なんだっけ、名前忘れた、ビヘイバー? あのー。あれ。hoge.aspxじゃなくて、hoge.aspx.csとか、後ろに隠れててコードを記述する方のファイル。なんだよね?
 つまり、たとえ$を=にして<%=DateTime.Now.ToShortDateString %>としたとしても、ここでスクリプトレットが動く訳じゃないよね?
 なので、
Updatecommand="Update [timecard] Set"
+ "[DATE]=@DATE"
+ ",[SYUKKIN]=@SYUKKIN"
+ ",[TAIKIN]=@TAIKIN"
+ ",[REST]=@REST"
+ ",[ZITUDOU]=@ZITUDOU"
+ ",[S_BIKOU]=@S_BIKOU"
+ ",[T_BIKOU]=@T_BIKOU"
+ ",[SUBMIT_DATE]=@SUBMIT_DATE"
+ ", [AMEND_DATE]=" + DateTime.Now.ToShortDateString //←これ
+ " ,[ADMIT]=@ADMIT "
+ "where [NAME]=@NAME"
ってやってやるとどうでしょうかね。「DateTime.Now.ToShortDateStringが実行された結果の文字列」を結合してあげるわけ。
 こういうのを固定でやる場合はSQLに任せる方が良いと個人的には思うけど。SQL Serverは忘れたけど、Oracleで言うところの「[AMEND_DATE=Sysdate」。
    • good
    • 0
この回答へのお礼

返信遅くなり申し訳ありません。回答ありがとうございます。
コードを記述してるのは隠してるほう(aspx.cs)ではなくaspxファイルのほうです。
ですので<%= %>が必要なのかなと思ったわけです。
aspx.csに記述するとしたらどのメソッドの中に記述すればいいかわからないですし。。

>>こういうのを固定でやる場合はSQLに任せる方が良いと個人的には思うけど

これはどういう意味でしょうか??SQLに任せるというのはストアドプロシージャを使うということですか??

データベースに関する知識がないのは痛いほどわかっておりますが、
どうしても早い段階で完成させたいのでどうかよろしくお願いします。。
返信お待ちしております。

お礼日時:2008/06/02 17:49

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