0

を使用してコードからストアド プロシージャを呼び出していますSqlCommand。一部のパラメーターはタイプです。Management Studio からプロシージャを呼び出すときは、たとえばDateTime次の形式を使用し、それに応じて結果が返されます。yyyy-MM-dd2011-01-01

私の C# コードではDateTime、次のようなオブジェクトを作成しています。

DateTime dateFrom = new DateTime(2011,01,01);

アプリケーションを実行すると、日付は完全に無視され、すべてのデータが返されます。DateTimeそれに応じてデバッグした後、オブジェクトの形式が次のようになっていることに気付きました{01/01/2011 00:00:00}。おそらくこれが問題の原因です。

パラメータは次のSqlCommandように追加されています。

cmd.Parameters.AddWithValue("@DateFrom", SqlDbType.DateTime);

何かアイデアはありますか?

コードのコピー:

 using (SqlConnection conn = new SqlConnection(connectionString))
 {
    DateTime dateFrom = new DateTime(2011,01,01);
        DateTime dateTo = new DateTime(2011, 01, 31);

    SqlCommand cmd = new SqlCommand(strStoredProcName, conn);
    cmd.CommandType = System.Data.CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("@DateFrom", SqlDbType.DateTime);
        cmd.Parameters.AddWithValue("@DateTo", SqlDbType.DateTime);

    cmd.Parameters["@DateFrom"].Value = dateFrom;
        cmd.Parameters["@DateTo"].Value = dateTo;
 }
4

3 に答える 3

3

C# から SQL への日時データ型の形式の問題はありません。

この問題には、次の 2 つの原因が考えられます。

  1. 私が覚えている限り、パラメーター名に @ を追加する必要はありません

    cmd.Parameters.AddWithValue("DateFrom", SqlDbType.DateTime);

  2. AddWithValue のオーバーロードは、文字列 parameterName とオブジェクト値です。SqlDbType.DateTime を値として渡しました。代わりに DateTime 変数を渡してください。

于 2013-03-25T15:30:04.510 に答える
3

次の形式を選択するAddAddWithValue、次の形式を使用するかの 2 つのオプションがあります。

1)cmd.Parameters.Add("@DateFrom", SqlDbType.DateTime).Value = dateFrom;

2) cmd.Parameters.AddWithValue("@DateFrom", dateFrom);

于 2013-03-25T15:31:20.040 に答える
0

ストアド プロシージャの datetime パラメーターが DateTime 型の場合、基本的に値を datetime として渡す必要はありません。以下のような単純な文字列値を渡すことができます。

cmd.Parameters.Add("@DateFrom", SqlDbType.DateTime).Value = "23-03-2013";
于 2013-03-26T07:01:06.360 に答える