@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

ストアドパラメータでの日付の受け渡しについて

投稿者投稿内容
sathios
会議室デビュー日: 2005/10/26
投稿数: 6
投稿日時: 2005-10-26 11:39
ASP.NET(VB)+SqlServer2000
(WebMatrix使用)
で開発しています。

SqlServerのストアドをASPから動作させたいのですが、
日付のパラメータを引き渡す時にエラーになってしまいます。
コードは以下のように記述しており、
「指定されたキャストは有効ではありません。」となってしまいます。

日付文字列をDate型へキャストして渡さないといけないかと思いますが、
どうもうまくいきません。

どなたかお力添えをお願いします。


'//////////////////////////////////////////////////////

Dim myConnection As String = ConfigurationSettings.AppSettings("conStringSql")
Dim cn As New SqlConnection(myConnection)

Dim cmd As New SqlCommand("sp_GETSITEACCNT", cn)
cmd.CommandType = CommandType.StoredProcedure
Dim p_dtBegDay As SQlParameter = cmd.Parameters.Add("@dtBegDay",SqlDbType.DateTime).Value = DateValue("2005/10/01")
Dim p_dtEndDay As SQlParameter = cmd.Parameters.Add("@dtBegDay",SqlDbType.DateTime).Value = DateValue("2005/10/01")
Dim p_nSiteCD As SQlParameter = cmd.Parameters.Add("@dtBegDay",SqlDbType.Int).Value = 11

cn.Open()
Dim dr As SqlDataReader = cmd.ExecuteReader()

grdAccessLog.DataSource = dr
grdAccessLog.DataBind()


らい
大ベテラン
会議室デビュー日: 2005/08/02
投稿数: 159
お住まい・勤務地: 東京都と千葉県のさかいめ
投稿日時: 2005-10-26 11:59
らいと申します。

すいません。一点だけ質問。
引用:

日付文字列をDate型へキャストして渡さないといけないかと思いますが、
どうもうまくいきません。


とありますが、どこでキャストしているのでしょうか。
確か、Date型へのキャストはCDateだと思ったのですが。

当方、VB.NETはやったことがないのでVB6での情報ですが、
少々確認したかったので。

もしくは、ストアドを改変して
ストアド側で日付文字列をdatetime型に変更という形にしてはいかがでしょうか。

_________________
一寸先は闇
安定してるシステムって言ったじゃん(泣)
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-26 12:01
つ DateTime.Parse メソッド

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
sathios
会議室デビュー日: 2005/10/26
投稿数: 6
投稿日時: 2005-10-26 13:45
お返事ありがとうございます。

らい様>
CDate()を使っても駄目でした(;;
ストアドではdatetime型で定義しているのですが、
同じDate型でもストアド用と.NET用で異なる型なのかと思ったりもしたのですが、
関係ありませんよね?
date型では元々無理なのかなぁ・・・。
テキスト渡しだったら多分できると思います。
date型でできなかったらこれでいきたいと思います。

じゃんぬねっと様>
DateTime.Parseを使って下記のように記述してみましたが、エラーになってしまいました。
Dim p_dtBegDay As SQlParameter = cmd.Parameters.Add("@dtBegDay",SqlDbType.DateTime).Value = DateTime.Parse("2005/10/01")

エラーメッセージ:
指定されたキャストは有効ではありません。
例外の詳細: System.InvalidCastException: 指定されたキャストは有効ではありません。

ふと思ったのですが、ストアドに渡すDate型はVBのDate型と異なるのでしょうか・・・。

[ メッセージ編集済み 編集者: sathios 編集日時 2005-10-26 13:46 ]
桜緋女
常連さん
会議室デビュー日: 2004/09/15
投稿数: 46
投稿日時: 2005-10-26 14:02
お世話になります。

Dim p_dtBegDay As SQlParameter = cmd.Parameters.Add("@dtBegDay",SqlDbType.DateTime).Value = DateTime.Parse("2005/10/01")
これって、改行入っていますけど一文ですよね?

Dim p_dtBegDay As SQlParameter = (cmd.Parameters.Add _("@dtBegDay",SqlDbType.DateTime).Value = DateTime.Parse("2005/10/01"))
つまり
Dim p_dtBegDay As SQlParameter = CBOOL(cmd.Parameters.Add _("@dtBegDay",SqlDbType.DateTime).Value = DateTime.Parse("2005/10/01"))
と解釈されているのではないですか?

パラメータAddするところと、
パラメータに値を入れるところを分けたら
うまくいきそうな予感がします。

試していないので、外していたらごめんなさい。

らい
大ベテラン
会議室デビュー日: 2005/08/02
投稿数: 159
お住まい・勤務地: 東京都と千葉県のさかいめ
投稿日時: 2005-10-26 15:32
ども、らいです。

引用:

sathiosさんの書き込み (2005-10-26 13:45) より:
らい様>
CDate()を使っても駄目でした(;;
ストアドではdatetime型で定義しているのですが、
同じDate型でもストアド用と.NET用で異なる型なのかと思ったりもしたのですが、
関係ありませんよね?
date型では元々無理なのかなぁ・・・。
テキスト渡しだったら多分できると思います。
date型でできなかったらこれでいきたいと思います。


よく考えたら、Date型でしたね、CDateって。
# DateTime型にしないと意味ないじゃん。orz

引用:

じゃんぬねっと様>
Dim p_dtBegDay As SQlParameter = cmd.Parameters.Add("@dtBegDay",SqlDbType.DateTime).Value = DateTime.Parse("2005/10/01")


ちと調べてました。
もしかしたら、DateTimeEx.Parseでいけるかも。
そんな情報を引っ掛けたので。情報

ではでは。


_________________
一寸先は闇
安定してるシステムって言ったじゃん(泣)
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-26 15:53
引用:

らいさんの書き込み (2005-10-26 15:32) より:

よく考えたら、Date型でしたね、CDateって。
# DateTime型にしないと意味ないじゃん。orz


実態は一緒ですよ。(^-^*)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
桜緋女
常連さん
会議室デビュー日: 2004/09/15
投稿数: 46
投稿日時: 2005-10-26 16:03
さくらです。
繰り返しになりますが、多分、日付型の問題ではなく、
Boolean型をSqlParamaterに変換できていないのではないかと。

Dim p_dtBegDay As SQlParameter = (cmd.Parameters.Add _("@dtBegDay",SqlDbType.DateTime)

p_dtBegDay.Value = DateTime.Parse("2005/10/01"))

でダメですか?

cmd.Parameters.Add("@dtBegDay",SqlDbType.DateTime).Value = DateTime.Parse("2005/10/01")
が先に評価されているんだと思うのですが。

スキルアップ/キャリアアップ(JOB@IT)