0

datetime の値が 2 つの値の間にある SQL 値のみが必要です。

私はこのコードを使用します

 filterdatum = "(Datum >= "+ startwaarde + " AND Datum < "+ eindwaarde+ ")";
 filter = filter + " AND " + filterdatum;

私のフィルターは次のようになります。

where "(Type like '%13%') AND (Datum >= 11/04/2013 00:00:00 AND Datum < 23/04/2013 00:00:00)"

私はいつもこのエラーを受け取ります:

'00' 付近の構文が正しくありません。

4

5 に答える 5

4

日付を一重引用符で囲みます。

filterdatum = "(Datum >= '"+ startwaarde + "' AND Datum < '"+ eindwaarde+ "')";
 filter = filter + " AND " + filterdatum;

ヒント: 次回実行できる簡単なテストは、クエリをデータベースで直接実行し、それが機能するかどうかを確認することです。

于 2013-04-23T07:49:10.360 に答える
3

より適切なオプションは、日付値をパラメータとしてクエリに渡すことです。日付値を文字列としてクエリ文字列に直接入れることは、常に問題があります。パラメータを作成して渡すための正確なコードは、データ アクセス テクノロジによって異なります。

ADO.NET を使用している場合は、次のように記述します。

filterdatum = "(Datum >= @startDate AND Datum < @endDate)";
...
command.Parameters.AddWithValue("@startDate", startwaarde);
command.Parameters.AddWithValue("@endDate", eindwaarde);
于 2013-04-23T07:57:37.680 に答える
2

必ず DateTimes を引用してください。そうしないと、SQL がそれらをテーブル/列名と見なす可能性がありますか?

于 2013-04-23T07:48:12.380 に答える
2

日付値の間に一重引用符を使用する必要があります。

filterdatum = "(Datum >= '"+ startwaarde + "' AND Datum < '"+ eindwaarde+ "')";

しかし、もっと重要なことは、常にパラメーター化されたクエリを使用する必要があることです。この種のコードは、SQL インジェクション攻撃に対してオープンです。

例えば;

SqlConnection conn = new SqlConnection(_connectionString);
conn.Open();
string s = "SELECT * From YourTable WHERE Datum >= @startwaarde AND Datum < @eindwaarde";
SqlCommand cmd = new SqlCommand(s);
cmd.Parameters.Add("@startwaarde", startwaarde);
cmd.Parameters.Add("@eindwaarde", eindwaarde);
SqlDataReader reader = cmd.ExecuteReader();
于 2013-04-23T07:54:59.993 に答える
0
  1. 日付/時刻の値を引用符で囲みます。
  2. 日付/時刻の値がISO 8601に準拠した形式であることを確認してください。がDateTime 型であるstartwaarde.ToString("o")と仮定すると、 でこれを行うことができます。startwaarde
  3. 最良の方法は、パラメーターを使用することです。したがって、SQL は次のようになります。データベースでフィルタリングしていると仮定して(Datum >= @1 AND Datum < @2)、2 つの値をパラメータとして に追加します。SqlCommand
于 2013-04-23T08:40:29.087 に答える