最初にSQLクエリに値を直接含めようとすると、うまくいきません。パラメータ化されたSQLを使用し、値をDateTime
として指定します 、データベーステーブルもであると仮定します 日付/日時フィールド(本来あるべきもの)を使用すれば、問題ないはずです。
次の3つの理由から、SQLに値を直接含めることは避けてください。
- 不適切な形式などを使用する可能性のある厄介な文字列変換が発生します。これがここでの問題です。
- SQLインジェクション攻撃 を招待しています
- コードとデータが混在しているため、コードの読み取りが難しくなり、データの確認が難しくなります
次のようなものが必要です:
string sql = @"Select distinct v.* from Ven v
inner join Des d on v.venid=d.venid
and cast(d.despdate as datetime) between @start and @end";
using (MySqlCommand command = new MySqlCommand(connection, sql))
{
command.Parameters.AddWithValue("@start", startDateTime);
command.Parameters.AddWithValue("@end", endDateTime);
// Execute the command here
}
Des.despdate
の場合 そうではありません すでに適切なデータ型である場合は、それを変更する必要があります...