- ベストアンサー
ASP+SQLにてSessionがNullになる
Windows 2000 Server環境でIISにて次のような問題に遭遇しています。 ~calendar.asp~ If Request("year") <> "" Then Session("STR_DATE") = Request("year") & "/" & Request("mon") & "/" & Request("day") End If と、上記のような記述があり、STR_DATEの値が代入されています。 にも関わらず、SQLを実行するとSTR_DATEがNullになってしまいます。 SQL = "INSERT INTO SCHEDULE([DATE],[CATEGORY],[NAME],[COMMENT]) VALUES ('" & Session("STR_DATE") & "','" &Request("category") & "','" &Request("name") & "','" & Request("comment") & "')" OBJ.Execute(SQL) 結果、日付(DATE)がNullでレコード追加されてしまいます。 ASP全文を掲載すると長文になってしまうので、一部抜粋して掲載しました。 情報不足は承知しておりますが、お知恵をお借りできませんでしょうか。 宜しくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにゃくは。 >>と、上記のような記述があり、STR_DATEの値が代入されています。 If Request("year") <> "" Then Session("STR_DATE") = Request("year") & "/" & Request("mon") & "/" & Request("day") End If response.write("セッション確認:" & Session("STR_DATE")) とやって、画面上に、Session("STR_DATE")の値が目視により確認できるか。(もし、画面表示されるページでなくても無理矢理出す。(でないと確認できないため。 JavaScriptのAlert使ってでも、もし自動遷移するような画面の構成でも、無理矢理とめて、格納直後に、確実に格納できていることを確認します。 次に。。。 response.write("挿入するセッション確認:" & Session("STR_DATE") SQL = "INSERT INTO SCHEDULE([DATE],[CATEGORY],[NAME],[COMMENT]) VALUES ('" & Session("STR_DATE") & "','" &Request("category") & "','" &Request("name") & "','" & Request("comment") & "')" 'OBJ.Execute(SQL)コメント化 として、SQL文実行する直前に、確実にそのSessionの値があるのかどうかを確認します。 これも、AlertでもResponse.writeでも何でも構わないので確実に出す必要があります。(じゃないと確認が出来ないので。 response.write("セッション確認:" & Session("STR_DATE")) こっちじゃ表示されるのに response.write("挿入するセッション確認:" & Session("STR_DATE") こっちじゃ表示されない のだったら、まぁ、そこまでのルーチンの間で消えてるんでしょうね。。。 初期化するような命令文があるのか無いのか、がんばって追いましょう。 現状では、 >>STR_DATEの値が代入されています。 本当に値が代入されてんの?? ってのを疑うしかできません。
その他の回答 (1)
これだけ見ると、Request("year")をそもそも受け取れてないのじゃないかととも思えますが、全体が分からないので、このような時はSQLを実行する前に書き出してみましょう。 Response.Write Session("STR_DATE") でちゃんと値がSessionに格納されているか確認してみてください。 色々人により違うかも知れませんが、私はSessionやRequestメソッドで得た値は一度変数に代入してから文字列の連結をすべきだと思います。 あとSQLでシングルクォーテーションで括ってあればNullではなくて空文字で格納されるはずですが...
補足
回答、ありがとうございます。 Response.Writeで途中までは、Sessionに値が格納されていることは判明しました。 しかし、SQL実行時には空の状態になっているようです。 そこでお伺いしたいのですが、Sessionで得た値を変数に代入するにはどのような方法を取ればよいのでしょうか。 程度の低い質問で申し訳ございません。 何卒お教えいただければ幸いです。 宜しくお願いいたします。
お礼
回答、ありがとうございます。 やはり、挿入するセッション確認:では表示されませんでした。 この間に何か問題があるのだと思います。 がんばって追ってみます。 ありがとうございました。
補足
原因がわかりました。 サーバーのホスト名に"_(アンダーバー)"が含まれていることが原因のようです。 http://pasofaq.jp/development/asp/session.htm やはり、Session変数の値を違う形で引き継がせる必要があるようです。 これについて何かお知恵をお貸しいただけませんでしょうか。 宜しくお願いいたします。