- PR -

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

投稿者投稿内容
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-26 16:23
引用:

さくらさんの書き込み (2005-10-26 16:03) より:

コード:

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

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


でダメですか?


私の読み違えかもしれませんが、Add するのはあくまでパラメータじゃないんでしょうか?

コード:

    Dim hParameter As New System.Data.SqlClient.SqlParameter("dtBegday", System.Data.SqlDbType.DateTime)

    hParameter.Value = DateTime.Parse("2005/04/07")

    hCommand.Parameters.Add(hParameter)


ついでですが、

引用:

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

もしかしたら、DateTimeEx.Parseでいけるかも。


それは、GrapeCity 製の製品にある InputMan に実装されたメソッドだと思います。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
らい
大ベテラン
会議室デビュー日: 2005/08/02
投稿数: 159
お住まい・勤務地: 東京都と千葉県のさかいめ
投稿日時: 2005-10-26 16:34
らいです。

引用:

じゃんぬねっとさんの書き込み (2005-10-26 15:53) より:
引用:

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

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


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


引用:

じゃんぬねっとさんの書き込み (2005-10-26 16:23) より:
引用:

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

もしかしたら、DateTimeEx.Parseでいけるかも。


それは、GrapeCity 製の製品にある InputMan に実装されたメソッドだと思います。


うを。
二重の恥ぢゃん。
# というか、最近こんなんばっか。orz

指摘、ありがとうです。>じゃんぬさん

_________________
一寸先は闇
安定してるシステムって言ったじゃん(泣)
CAN
会議室デビュー日: 2003/07/11
投稿数: 4
投稿日時: 2005-10-26 17:22
以前 作ったのを見てみましたが、文字列で渡してました。

' 1分前の日時を設定
Dim pBeforeDate As New SqlParameter("@BeforeDate", SqlDbType.DateTime)
pBeforeDate.Value = DateTime.Now.AddMinutes(-1).ToString("yyyy/MM/dd HH:mm:ss")
myCommand.Parameters.Add(pBeforeDate)
桜緋女
常連さん
会議室デビュー日: 2004/09/15
投稿数: 46
投稿日時: 2005-10-26 17:27
お世話になります、さくらです。
引用:

じゃんぬねっとさんの書き込み (2005-10-26 16:23) より:
引用:

さくらさんの書き込み (2005-10-26 16:03) より:

コード:

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

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


でダメですか?


私の読み違えかもしれませんが、Add するのはあくまでパラメータじゃないんでしょうか?

コード:

    Dim hParameter As New System.Data.SqlClient.SqlParameter("dtBegday", System.Data.SqlDbType.DateTime)

    hParameter.Value = DateTime.Parse("2005/04/07")

    hCommand.Parameters.Add(hParameter)





一部括弧の消し忘れがあって、おかしくなっていたようです。
失礼しました。
ただ、Addの引数自体は問題ないと思います。
コード:

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

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



パラメータ名と型を渡すのでも、パラメータの追加は可能です。
そうすると、追加されたSqlClient.SqlParameterを戻してきますから、
そこに後付けで値を設定してやることが出来ます。

ListViewのアイテム追加と似た感じかと。

もちろん、インスタンスを作ったSqlParamaterを直接追加することも出来ます。
じゃんぬさんの書き方のほうが、すっきりしてますね。

元のソースがどこで型変換エラーしているかを示すのには、
上記の修正の方が元の形を残しているかと。
(なんていいつつ、手抜き修正なだけかも・・・。)


Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-10-26 20:04
引用:
コード:
Dim p_dtBegDay As SQlParameter
	= cmd.Parameters.Add("@dtBegDay",SqlDbType.DateTime).Value
	= DateValue("2005/10/01")



変だね。1つの式に代入演算子が2つあるもんね。
または、後の = は比較演算子扱いかな?
Language C では、代入した値がそのまま式の値として出力されるけど、VB.NET って、どうなのかなぁ?
↑ってことですよね?>さくらさん、じゃんぬねっとさん

コード:
cmd.Parameters.Add("@dtBegDay",SqlDbType.DateTime).Value
	= DateValue("2005/10/01")

OR

Dim p_dtBegDay As SQlParameter
	= cmd.Parameters.Add("@dtBegDay",SqlDbType.DateTime)
p_dtBegDay.Value = DateValue("2005/10/01")



# ポインタじゃないんだよなぁ。。。
# "Day" で日付なのも明らかだし。。。

_________________
桜緋女
常連さん
会議室デビュー日: 2004/09/15
投稿数: 46
投稿日時: 2005-10-26 20:45
お世話になります、藤田です。
引用:

Jittaさんの書き込み (2005-10-26 20:04) より:
引用:
コード:
Dim p_dtBegDay As SQlParameter
	= cmd.Parameters.Add("@dtBegDay",SqlDbType.DateTime).Value
	= DateValue("2005/10/01")



変だね。1つの式に代入演算子が2つあるもんね。
または、後の = は比較演算子扱いかな?
Language C では、代入した値がそのまま式の値として出力されるけど、VB.NET って、どうなのかなぁ?
↑ってことですよね?>さくらさん、じゃんぬねっとさん

コード:
cmd.Parameters.Add("@dtBegDay",SqlDbType.DateTime).Value
	= DateValue("2005/10/01")

OR

Dim p_dtBegDay As SQlParameter
	= cmd.Parameters.Add("@dtBegDay",SqlDbType.DateTime)
p_dtBegDay.Value = DateValue("2005/10/01")



# ポインタじゃないんだよなぁ。。。
# "Day" で日付なのも明らかだし。。。




そういうことです。
で、VB.NETでは多分、後ろは比較演算子として解釈されたような覚えがあります。

ためしに、
コード:
Option Strict On
'~~~
Dim i As Integer
Dim j As Integer = i = 1 - 1


とやると、やはり
「Option Strict On で"Boolean"から"Integer"への暗黙的な変換はできません」
というビルドエラーが発生します。
それと同じではないでしょうか。
sathios
会議室デビュー日: 2005/10/26
投稿数: 6
投稿日時: 2005-10-26 21:33
たくさんの書き込みありがとうございます。
おかげ様で無事解決しました。

結果からお話しますと、さくらさんのおっしゃるとおり
下記の記述で正しく動作しました。
Dim p_dtBegDay As SQlParameter = (cmd.Parameters.Add _("@dtBegDay",SqlDbType.DateTime)

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

日付型に関わらず、下の
Dim p_nSiteCD As SQlParameter = cmd.Parameters.Add("@dtBegDay",SqlDbType.Int).Value = 11
でも同じエラーが発生したので、Date型の問題ではなかったようです。

ありがとうございました。





[ メッセージ編集済み 編集者: sathios 編集日時 2005-10-27 08:13 ]

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