1

string s = @"select * from Bill_Detail where DateTimeofBilling='" + mcCalendar.SelectionStart.ToShortDateString()

だから私はこのコードを持っています。toshortdatestring のため、mcCalendar の値は '8/20/2013' です。日付、mcCalendar からすべての行を取得する必要があります。

そうです

select * from Bill_Detail where DateTimeofBilling='8/20/2013'

Database テーブルの DateTimeofBilling は DateTime データ型です。sqlserver 2008

このコードを使用して取得する予定の行を取得できないのはなぜですか?

4

4 に答える 4

2

私の推測ではToShortDateString、文化的な理由から、とにかく希望する値を実際に返しているわけではありません。正しい修正は、テキスト処理を変更することではなく、パラメーター化されたクエリを使用することです。

string sql = "select * from Bill_Detail where DateTimeofBilling=@QueryDate";
using (var command = new SqlCommand(sql, conn))
{
    command.Parameters.Add("@QueryDate", SqlDbType.Date).Value = 
        mcCalendar.SelectionStart.Date;
    // Execute the command
}

値を含む SQL 文字列を作成するのではなく、常にパラメーター化されたクエリを使用します。

  • SQL インジェクション攻撃を回避します
  • このようなデータ変換の問題を回避します
  • コード(SQL) をデータから分離しておくと、何が起こっているのかを簡単に確認できます。
于 2013-08-21T15:07:03.483 に答える
0

これは、where 句から時間要素を削除したために発生します。

たとえば、値が「8/20/2013 00:00:00」の場合、完全なDateTimeパラメーターが必要です。

いくつかの方法で修正できます。

1) 次の SQL を使用します。

string s = @"select * from Bill_Detail where DateTimeofBilling like '"
+ mcCalendar.SelectionStart.ToShortDateString() + "%'";

また

2)「ToShortDateString」を削除して、通過するパラメーターが完全な日付と時刻になるようにします(mcCalendar.SelectionStart = 8/20/2013 00:00:00)

string s = @"select * from Bill_Detail where DateTimeofBilling = '"
    + mcCalendar.SelectionStart + "'";
于 2013-08-21T15:35:22.927 に答える
0

サーバーが米国スタイル (mm/dd/yyyy) ではなく英国スタイルの日付 (dd/mm/yyyy) に設定されている場合、問題が発生する可能性があります。日付を「dd-mmm-yyyy」と指定してみてください。

string queryDate = mcCalendar.SelectionStart.Date.ToString("dd-MMM-yyyy");
string s = "SELECT * FROM Bill_Detail WHERE DateTimeofBilling = '" + queryDate + "'";
于 2013-08-21T15:08:52.050 に答える
0
string s = @"select * from Bill_Detail where DateTimeofBilling=CONVERT(date, '" + mcCalendar.SelectionStart.ToShortDateString() + "'); "

探していることを実行する必要があります (最後に ' がありませんでした)。しかし、はい、パラメーター化されたクエリは、はるかに優れた方法です。

次のコードが結果を返すかどうかを確認します。フィールドの命名が正しい場合は、変換なしで「08/20/2013 12:00:00」を特に探している可能性があります。

select * from Bill_Detail where CONVERT(date, DateTimeofBilling)='08/20/2013';
于 2013-08-21T15:06:46.873 に答える