-2

私は C# アプリケーションを開発しておりdate、SQL Server に列を持っています。

を使用して、日付に基づいてクエリを実行していますDateTimePicker。日時ピッカーの形式を短い形式に変更しました。日付が次のように表示されるようになりましたmm-dd-yyyy

実行中に日付1〜12から正しい出力が得られますが、13の日付を選択するとすぐにエラーが発生します

文字列から日付/時刻を変換する際に変換に失敗しました

何が起こっているのかわからない!

4

1 に答える 1

4

DateTimePickerそこからフォーマットされた文字列を使用して、フォーマット文字列または連結を介してオンザフライでSQLクエリを作成していると思われます。

そうしないでください。

SQL の日付/時刻文字列リテラルは、パーツの順序が異なる適切な形式 (ISO 8601 など) を使用する傾向があります。ピースを 12 から 13 に変更すると爆発するという事実は、実際にはそれを与えるはずです。

SqlCommandはパラメーターがあります ( を使用してクエリに挿入できます@foo。これらを使用すると、すべてが正しい方法で渡され、適切に引用されます。

using (SqlCommand c = connection.CreateCommand()) {
    c.CommandText = "Select roll_number,name from Attendance_table where date=@date";
    c.Parameters.AddWithValue("date", dateTimePicker1.Value);
    using (var r = c.ExecuteReader()) {
        ...
    }
}

(大まかに言えば、適切な使用法についてはドキュメントを参照する必要があります。私がそのようなことを書いたのは久しぶりです)

于 2013-03-13T12:57:26.937 に答える