C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 30 を表示中)
■14160 / )  Re[1]: Accessからtextboxへ表示させるには
□投稿者/ 魔界の仮面弁士 (612回)-(2008/02/11(Mon) 19:56:06)
No14156 (マユミ さん) に返信
> Dim cmd As New OleDb.OleDbCommand
ここで、「New」を使ってオブジェクトを作成していますが、その後で、

> cmd = cn.CreateCommand()
ここで、別のオブジェクトを代入してしまいますよね。
後から CreateCommand の結果を代入するのであれば、宣言時の New は不要かと。


で、本題。

> cmd.CommandText = "SELECT 予定,内容 FROM db WHERE 予定 = '" & planchangetext.Text & "',日時 = '" & daychangetext.Text & "'"

[日時] という事は、日付部だけではなく、時刻部も含むのですよね。
だとすると…こうかな。「SQL インジェクション」への対策も忘れずに。

cmd.CommandText = String.Format( _
"SELECT 予定,内容 FROM db WHERE 予定='{0}' AND 日時=#{1:M\/d\/yyyy H\:mm\:ss}#", _
TextBox1.Text.Replace("'", "''"), DateTimePicker1.Value)


もしくは、Parameters を利用する方法もあります。SQL インジェクション対策なら、こちらの方が安全。
cmd.Parameters.Add の順番と、PARAMETERS コマンドの順番を一致させる必要があります。

cmd.CommandText = "PARAMETERS YOTEI TEXT, NICHIJI DATE; SELECT 予定,内容 FROM db WHERE 予定=YOTEI AND 日時=NICHIJI"
cmd.Parameters.Add("YOTEI", OleDb.OleDbType.VarWChar)
cmd.Parameters.Add("NICHIJI", OleDb.OleDbType.Date) 'DBTimeStamp でも可
cmd.Parameters("YOTEI").Value = TextBox1.Text '値の割り当て
cmd.Parameters("NICHIJI").Value = DateTimePicker1.Value


さらに、パラメータの型指定を自動判定に任せるなら、こんな書き方もできます。
(型が曖昧になるので個人的には非推奨ですが、スッキリ短く書けるので、可読性は良いかと)

cmd.CommandText = "SELECT 予定,内容 FROM db WHERE 予定=YOTEI AND 日時=?"
cmd.Parameters.AddWithValue("YOTEI", TextBox1.Text)
cmd.Parameters.AddWithValue("NICHIJI", DateTimePicker1.Value)
返信 編集キー/


管理者用

- Child Tree -