• ベストアンサー

Request.QueryStringの型について

Request.QueryString("testNo")で取得した値の型についてなのですが、私は文字列だと思っていました。 ところがここでわからなくなってしまったのが、 Request.QueryString("testNo")で取得した値を比較するときです。 たとえば ttp://xxxx/xxx.aspx?testNo=3 で受取ったRequest.QueryString("testNo")を比較するとします。 if Request.QueryString("testNo") = "3" then と if Request.QueryString("testNo") = 3 then ではどちらもTrueになるのですが、これはどうしてなのでしょう? どういった解釈がなされているのかが知りたいです。 もしくは、書いてあるページを教えていただけると幸いです。 今までは特に気にしてなかったのですが、文字列を数値で比較しても 大丈夫なのでしょうか? 自分の書いたところ見るとどっちのパターンでも書いてあって あやふやです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

HttpRequest.QueryStringはNameValueCollection型ですから,KeyもValueもStringです。 http://msdn2.microsoft.com/ja-jp/library/system.web.httprequest.querystring.aspx http://msdn2.microsoft.com/ja-jp/library/system.collections.specialized.namevaluecollection.aspx さて,今回の場合はVisual Basicですよね。 これがC#だと自動変換がないので間違いなくエラーになるのですが,VBではOption StrictがOffだと自動変換がはたらいてしまいます。さらに,デフォルト値がOffだったりします。 http://msdn2.microsoft.com/ja-jp/library/zcd4xwzs.aspx いろいろとややこしいことになるので,Option StrictはOnにしておくことをお勧めします。

lalabye7
質問者

お礼

ありがとうございました。 VBは自動変換するのがデフォルトなんですね。 スッキリしました!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • STICKY2006
  • ベストアンサー率29% (1536/5269)
回答No.3

しまった。。。 読み直したら違ってたので再回答(汗 >>Dim abc as int >>abc = CInt(request.querystring("testNo")) >>もしくは >>Dim abc as String >>abc = CStr(request.querystring("testNo")) そもそも、ASP(.netだとか、別環境じゃ知りませんが、VBScriptであることを前提とする場合。。。)だと、変数宣言に型までつけるとエラーでしたっけね(汗 Dim abc までしかできない。ですね。 その後の、データ型変換は自分でもやってるので大丈夫かと思いますが。

全文を見る
すると、全ての回答が全文表示されます。
  • STICKY2006
  • ベストアンサー率29% (1536/5269)
回答No.1

>>文字列を数値で比較しても大丈夫なのでしょうか? ん~。ここについてだけ回答です。 >>if Request.QueryString("testNo") = "3" then >>if Request.QueryString("testNo") = 3 then なので。。。 Dim abc as int abc = CInt(request.querystring("testNo")) もしくは Dim abc as String abc = CStr(request.querystring("testNo")) で、データ型を強制的に決めちゃいます。 そしてから使うと混乱しなくて済んだりします(´・ω・`) 。。。たまに、型宣言ミスって混乱する自分が言うのもなんですが(汗 http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh05/cformwsh05_01.html http://tryasp.winscom.co.jp/document/vbscript/7.htm 確証はないですけど。。。 「何型なの?」って言われたとしたら、バリアント型じゃないかな。。。?程度の記述はいろんなところに落ちてました。 まぁ、それから察するに。。。 「"3"」と「3」の違いは、バリアント型だから、どっちであってもOKってことじゃないですかね。 型宣言して、格納してみてからそれぞれやってみたら変わるかも??

参考URL:
http://www.mhl.janis.or.jp/~winarrow/vbscript/
lalabye7
質問者

お礼

開発環境書いてなくてすいませんでした。 バリアント型とか初めて意識しました。 ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • request.QueryStringについて

    Iページ遷移する前のASPのURLで、あるパラメータ自体が存在するか存在しないかで次のASPの実行が異なる処理をさせるにはどのように書けば良いか教えて頂けますでしょうか? 例えば遷移前のページでshuruiというパラメータがあるか無いかのパターン分けをします。 <% If request.QueryString("shurui") = "1" Then %> 実行A <% ElseIf request.QueryString(※shuruiパラメータが存在しない場合) Then %> 実行B <% END IF %> 実行Bを走らせる場合にもただ単に<% ElseIf request.QueryString("shurui") = "" Then %> 値を存在しない場合と書けば宜しいのでしょうか? 宜しくお願いします。

  • 型の変換

    Request.QueryStringで、例えば2008/9/4 20:00みたいな値を取得して それをDBに書き込みたいのですが、「型の変換に失敗しました」というエラーがでてしまいます。 書き込みたい項目がdatatime型なので、CData()を使ってみたのですがうまくいきません。 こういう場合は、どうしたらいいのでしょう?

  • VBAの変数の型について

    VBAの変数の型について VBA初心者です。 下記のようにして背景に色を付けようと思ったのですが、 文字列型の変数名では、型が違うとエラーが出ます。 ただ、事情により、文字列型でしか色情報を取得できないため、 VBA内部で型の変更をして、上手く処理出来ないかと考えています。 文字列型から色名に対応する型への変更は、出来るのでしょうか? --------------------------------------- .BackgroundPatternColor = 文字列型変数名 --------------------------------------- 現在は、諦めて、下記のようにして対応しています。 --------------------------------------- If (bgColor = "黄") Then .BackgroundPatternColor = wdColorYellow End If --------------------------------------- よろしくお願い致します。

  • Request.Querystringについて

    ASPについて教えてください。 基本的な質問です。プログラム初心者です。 プログラムを前の方へ辿っていっても、 以下のスクリプトでRequest.QueryStringする"YM"や"MOVE"が定義されているところが見当たりません。 環境変数?にもそのようなものは、無さそうなのですが。 この"YM"や"MOVE"はどのようなものと考えれば良いでしょうか? スクリプトなので上から順番に処理されていくと理解していたのですが、 そもそも間違いでしょうか? <% sYM = Request.QueryString("YM") If sYM = "" Then iYear = Year(Now()) iMonth = Month(Now()) Else iYear = Left(sYM,4) iMonth = Right(sYM,2) End If sMove = Request.QueryString("MOVE") If sMove <> "" Then If sMove = "Next" Then ix = 1 Else ix = -1 End If iTmp = DateSerial(iYear, iMonth + ix, 1) iYear = Year(iTmp) iMonth = Month(iTmp) End If iLastDay = Day(DateSerial(iYear, iMonth + 1, 1 - 1)) iDay = 1 - Weekday(DateSerial(iYear, iMonth, 1)) + 1 Response.Write "" Response.Write "" Response.Write "" sPrg = "calendar.asp?YM=" & iYear & Right("00" & iMonth, 2) Response.Write "" Response.Write "" Response.Write "" For x = 0 To 6 If x = 0 Then sCol = "#EECCCC" Else sCol = "#EEEEEE" End If Response.Write "" Next For y = 0 To 5 Response.Write"" For x = 0 To 6 If x = 0 Then sCol = "#FFCCCC" Else sCol = "WHITE" End If If Date() = DateSerial(iYear, iMonth, iDay) Then sCol = "#FFE6CC" fToday = True Else fToday = False End If If iDay > 0 Then Response.Write "" Else Response.Write "" End If iDay = iDay + 1 If iDay > iLastDay Then Exit For End If Next Response.Write "" If iDay > iLastDay Then Exit For End If Next Response.Write "

  • 「型が一致しません」のエラーが出るのですが

    htmlファイルのformに入力されたものを、aspで処理したいのですが、 エラーが出て困っています。 html内には   <INPUT TYPE=text NAME=year VALUE="" SIZE=3>年   <INPUT TYPE=text NAME=month VALUE="" SIZE=3>月   <INPUT TYPE=text NAME=day VALUE="" SIZE=3>日 があり、 aspでは  YEAR=Request.Form("year")  MONTH=Request.Form("month")  DAY=Request.Form("day") ここで、フォームの"month"に6が入力されているときのみ、 YEARに+1925し、ほかの時には+1988したいんです。そこで Dim NEN NEN=YEAR     If month="6" Then       NEN=DateAdd("yyyy",NEN,1925)      Else     NEN=DateAdd("yyyy",NEN,1988)     End If としてみたのですが、「型が一致しません」というエラーが出てしまいます。 おそらく最初にYEARに入っている(フォームから戻ってくる)値が文字列なので、それでほかの代数?に入れても文字列として処理されてしまって、1925などの数字を足すことができないのだろうと思うんですが…それであっていますでしょうか。だとしたら、型を一致させたいんですがどうしたらいいでしょうか? ものすごく醜い感じになってしまっていると思います…すみませんが、 よろしくお願いします。

  • Request.Params("xxx")で「+」が消える

    ASP.NET(VB)で開発をしております。 親画面のjavascriptのwindow.openで子画面を開く際に、 パラメータ「?xxx=123+456」を渡しています。 子画面側のサーバ処理のRequest.Params("xxx")で パラメタを取得すると「+」が消えてしまい、 「123 456」となってしまっています。 子画面のURLにはちゃんと「?xxx=123+456」と表示されているので、 Request.Params("xxx")で取得する際に、 「+」がスペースに変換されてしまっているのだと思うのですが、 ネットで調べても同様の事象は見つけられませんでした。 これはASPのRequestクラスの仕様なのでしょうか? また対応策などご存知お方、ご教授いただけますでしょうか。 よろしくお願いします。 以下コードです。 【親画面】 window.open("./child.aspx?xxx=123+456","test",""); 【子画面 (child.aspx)】 Dim xxx As String = Request.Params("xxx") '↑xxx = "123 456"となってしまいます。

  • query stringの受け取りについて

    「http://hogehoge/hoge.cgi?input=xxx」のように 飛んできたリクエストからQUERYSTRINGの値(input)を取得したい場合にGETで来てもPOSTで来ても取得は 可能でしょうか? GETで取れて、POSTで取れない原因で何か考えられる 原因とかありましたら教えて下さい。 よろしくお願いします。

    • 締切済み
    • CGI
  • VBA 型を比較してくれる命令?関数?

    Dim 変数 as Date 変数 = ActiveCell などとしていた場合に、該当のセルの中にDate型の値が入っていれば問題ないですが、文字列などが入っていた場合は「型が一致しません」と出て止まってしまいますよね。 On Err GoTo Err 変数 = ActiveCell On Err GoTo 0 Exit sub Err: エラー処理 などとして逃がしていたんですが、Goto文の扱いが面倒でこれを何とかでいないかと頭を悩ませています。 if文とかで使えるような、セルの値の型を比較してくれるようなメソッドなり関数なりないのでしょうか? ネット上をいろいろ探してみたのですが、簡単に済ませられるような方法が見つかりませんでした。 If (参照セルの中の型を確認して希望の物と違う) Then   処理 Else   処理 Endif と簡単にできる方法があれば、ぜひ教えてください。 よろしくお願いいたします。 Excelのバージョンは2003となります。

  • 型変換処理とラベル

    VB初心者です。何卒お助けください。 VB6.0であるアプリケーションを開発しています。 下記のソースで文字列で取得したparmを 数値に変換し、36文字以下か以上の比較をして 36文字なら以下ならLabel1(0).Captionにそのまま 入力。36文字以上ならLabel1(1).Captionに表記して Label1(0).Captionにその後続く文字列をいれたいのですが どのようなコードを書けばよいでしょうか? 何卒宜しくお願い致します。 Private Sub xxx(parm As String) XXNO$ = parm    If Label1(0).Caption = "" Then Label1(0).Caption = XXNO$ If XXNO$ = 36 Then Text1(0).Text = XXNO$ Else For iii = 4 To 1 Step -1  Label1(iii).Caption = Label1(iii - 1).Caption Text1(iii).Text = Text1(iii - 1).Text Next iii Label1(0).Caption = XXNO$ Text1(0).Text = XXNO$ End If

  • 0をstringにできません。

    PHPで数字の0をstringとして扱えないようですが これは仕様でしょうか? ---------------------- echo("<br>数値として比較:"); $in=0; echo('<br>0の場合値は'); if($in==FALSE){echo('FALSE');} $in=1; echo('<br>1の場合値は'); if($in==TRUE){echo('TRUE');} echo("<br><br>文字列として比較:"); $in='0'; settype($in,"string"); echo('<br>"0"の場合値は'); if($in==FALSE){echo('FALSE');} $in='1'; settype($in,"string"); echo('<br>"1"の場合値は'); if($in==TRUE){echo('TRUE');} ---------------------- 上記コードを実行してみると ---------------------- 数値として比較: 0の場合値はFALSE 1の場合値はTRUE 文字列として比較: "0"の場合値はFALSE "1"の場合値はTRUE ---------------------- となって0がstringとして扱われてるのなら 文字列として比較した場合0でも1でもTRUEに なると思うのですが・・・

    • ベストアンサー
    • PHP