- - PR -
ストアドパラメータでの日付の受け渡しについて
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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-10-26 11:59
らいと申します。
すいません。一点だけ質問。
とありますが、どこでキャストしているのでしょうか。 確か、Date型へのキャストはCDateだと思ったのですが。 当方、VB.NETはやったことがないのでVB6での情報ですが、 少々確認したかったので。 もしくは、ストアドを改変して ストアド側で日付文字列をdatetime型に変更という形にしてはいかがでしょうか。 _________________ 一寸先は闇 安定してるシステムって言ったじゃん(泣) | ||||||||
|
投稿日時: 2005-10-26 12:01
つ DateTime.Parse メソッド
_________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 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 ] | ||||||||
|
投稿日時: 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-10-26 15:32
ども、らいです。
よく考えたら、Date型でしたね、CDateって。 # DateTime型にしないと意味ないじゃん。orz
ちと調べてました。 もしかしたら、DateTimeEx.Parseでいけるかも。 そんな情報を引っ掛けたので。情報 ではでは。 _________________ 一寸先は闇 安定してるシステムって言ったじゃん(泣) | ||||||||
|
投稿日時: 2005-10-26 15:53
実態は一緒ですよ。(^-^*) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 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") が先に評価されているんだと思うのですが。 |