0

データベースからデータを取得するために使用される次の行コードがあります。

DataTable newEquipmentTable = database.Connection.RetrieveData(database.AdapterType, string.Format("SELECT ID FROM Equipment WHERE Name = '{0}' AND CreatedOn = '{1}'", equipment.Name, equipment.CreatedOn.ToString("yyyy-MM-dd HH:mm:ss.fff")));

「varchar データ型を datetime データ型に変換した結果、範囲外の値が発生しました」というエラーが返されます。

直接相談すると、次のクエリを使用して期待される結果が返されます。

SELECT ID FROM Equipment WHERE Name = 'aa' AND CreatedOn = '2012-04-17 19:42:49.650'

私は何を間違っていますか?

4

3 に答える 3

2

Stringフィールドを選択するために値を渡していdatetimeます。したがって、最初に日時に変換する必要があります。

Convert(datetime,'2012-04-17 19:42:49.650', 102)

それとは別に、@ Mr47 が言及したように、SQL インジェクションSqlParametersに対してオープンである可能性があります。

于 2012-04-18T13:18:07.920 に答える
0

equipment.CreatedOn の値は何ですか?

SQLサーバーまたはアプリケーションのカルチャ設定に問題があると思います。日付を直接変換することはできません。ユーザー文化の設定が問題を解決します。

于 2012-04-18T13:21:49.890 に答える
0

datetimeSQL の型は より前の値を保持できないことに注意してください1753-01-01

問題を見つけるために、データベースのクエリに使用する前に、デバッガーで SQL 文字列を調べるだけです。

ただし、最善の方法は、パラメーター化されたクエリを使用することです (この例のように)。そうしないと、SQL インジェクションに対して脆弱になります。

于 2012-04-18T13:16:04.770 に答える