5

私の SQL サーバーには、テスト用の非常に単純なテーブル IDDateありますHoursvarcharDateTimevarchar

SQL の DateTime 形式は次のようになりますyyyy-MM-dd HH:mm:ss.fff

C# の DateTime 形式は次のようになりますyyyy-dd-MM HH:mm:ss.fff

次のコードを使用して、C# DateTime 形式を取得します。

 string ddd = "2012-10-10 00:00:00.000";
 dt1 = DateTime.ParseExact(ddd, "yyyy-MM-dd HH:mm:ss.fff", null);

にしようとするとyyyy-dd-MM、エラーが発生します。

文字列で表される DateTime は、カレンダーではサポートされていません。

私のC#アプリケーションでは、サンダーの日付間の合計時間を見つけようとしています。私はそれを機能させましたが、01から12の間の日付でしか機能しません.

したがって、2012-01-10to 2012-10-10(10 日) のように、データベースから正しい合計時間数が得られます。

しかし、(14 日)に書き込む2012-01-10と、エラーが発生します。2012-14-10

char データ型を datetime データ型に変換すると、範囲外になりました」

前もって感謝します。

PS。日付を取得する簡単な方法を提案できますか?

mySQL クエリ

string CommandText = "SELECT * FROM date_test WHERE id = '4' AND date BETWEEN '" + dt1 + "' AND '" + dt2 + "'";

私は問題を理解しましたが、解決策ではありません。

問題は、SQL データベースが形式を調べて yyyy-MM-dd を要求することですが、C# では yyyy-dd-MM しか送信できません。

ParseExact()yyyy-MM-ddができないのはなぜですか?

4

2 に答える 2

4

SQL インジェクションの完璧な土台を準備しています。こちら
もご覧ください。パラメータ化されたクエリの例があります。

于 2012-09-24T11:26:55.573 に答える
3

文字列で表される DateTime は、カレンダーではサポートされていません。

このエラーは、C# アプリケーションが日付2012-14-1014th月、10th日、および2012th year. 日と年の作業は見つかりますが、月は見つかりません。さらに、C# アプリケーションが日付を表示する方法を変更しようとしないでください。これは、システムのカルチャに基づいています。

オブジェクトを定義するDateTime方法とオブジェクトを表示する方法を混乱させています。

日付を SQL として保存しているので、何らかの解析DateTimeを行う必要があると信じる正当な理由はありません。以下のコードサンプルを検討してください。

var dataTable = new DataTable();
var dataAdapter = new SqlDataAdapter("SELECT * FROM YourTable", "{connection string}");

dataAdapter.Fill(dataTable);

var yourDate = dataTable.Rows[0]["Date"]; <=== the type will be DateTime, simple.

パラメータの追加

クエリの例を見てみましょう:

"SELECT * FROM date_test WHERE id = '4' AND date BETWEEN '" + dt1 + "' AND '" + dt2 + "'";

少し修正してみましょう。以下の例を考えてみましょう。

var dataTable = new DataTable();
var dataAdapter = new SqlDataAdapter("SELECT * FROM date_test WHERE id = @ID AND date BETWEEN @StartDate AND @EndDate", "{connection string}");

dataAdapter.SelectCommand.Parameters.AddWithValue("@ID", "4");
dataAdapter.SelectCommand.Parameters.AddWithValue("@StartDate", new DateTime(2012, 10, 1));
dataAdapter.SelectCommand.Parameters.AddWithValue("@EndDate", new DateTime(2012, 10, 14));

dataAdapter.Fill(dataTable);

var yourDate = dataTable.Rows[0]["Date"]; <=== the type will be DateTime, simple.
于 2012-09-24T11:24:28.510 に答える