|
■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)
|