• ベストアンサー

型の変換

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

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

  • ベストアンサー
noname#259269
noname#259269
回答No.4

>Response.Write a1(2) SQL自体をResponse.Write かファイルに書き出すと何か判るかもしれません。 >OracleではなくSQLサーバーですが なるほどdatetime型でしたね。 >insert into table(x,yo,time) values(2,2,2008/9/4 20:00:57) SQL編集部分のコーディングに準拠するなら insert into table(x,yo,time) values('2','2','2008/9/4 20:00:57') こうでは?(実際にプログラムが編集した SQL を使わないと意味ないです。) こちらではこの SQL で Management Studio 使ってうまく登録できましたが(SQLServer2005)。。。 khazad-lefty さんがおっしゃるように CONVERT かました方がよさそうな気はしますね。

shaka001
質問者

お礼

回答ありがとうございます。 シングルコーテーションをつけるだけで解決しました。 >SQL自体をResponse.Write かファイルに書き出すと何か判るかもしれません。 この方法は役に立ちました。

その他の回答 (3)

回答No.3

時間を挿入する場合はCONVERT関数をつかって明示的にSQL文の中で日付型に変換しないといけなかったかも(自動的にCASTされないというか)

shaka001
質問者

お礼

回答ありがとうございます。 どうやら、シングルコーテーションとダブルコーテーションの使い方が間違っていただけのようです。 CONVERT関数も調べてみます。

noname#259269
noname#259269
回答No.2

a(2)の中身を表示してみて、正しく日時が入っていますか? 日付と時間の間の半角空白が「+」になってたりしませんか? 入っている場合、その SQL だけを直接 SQL*Plus (Oracleの場合)などで実行して、うまくいきますか?

shaka001
質問者

補足

Response.Write a1(2) としたら 2008/9/4 20:00:57 と表示されます。+ではなく空白で表示されていました。OracleではなくSQLサーバーですが、直接 insert into table(x,yo,time) values(2,2,2008/9/4 20:00:57) としたら '20' 付近に不適切な構文があります。 というエラーが出ました。

noname#259269
noname#259269
回答No.1

SQLの編集箇所とその周辺(QueryString で得た値をセットする箇所)のコーディングを示してください。

shaka001
質問者

補足

sample.asp?a=1,1,2008/9/4 20:00:57&name=太郎 a=Request.QueryString("a") name=Request.QueryString("name") a1=split(a,",") DB接続 SQL = "Insert Into table (x,y,time,name)" & _ "values('" & a1(0) & "','" & a1(1) & "', '" & a1(2) & "', '" & nema & "');" adcn.Execute SQL かなりざっくりとですが、こんな感じです。

関連するQ&A