1

あなたが私のプロジェクトで私を助けてくれることを願っています. 私はずっと前にこの問題を解決しようとしてきましたが、うまくいきません。

C# から MS SQL サーバーに日時を渡そうとしていますが、サーバーが「1900-01-01 00:00:00.000」の形式で日時を格納していることに注意してください。

ローカルで使用すると完全に機能しますが、ページをサーバーにアップロードするとエラーが発生します。

  string connectionString;
            SqlConnection mySqlConnection;
            connectionString = ConfigurationManager.ConnectionStrings[("connectionNamr")].ConnectionString;
           mySqlConnection = new SqlConnection(connectionString);
            SqlCommand mySqlComd = new SqlCommand();
            SqlDataReader reader;
            mySqlComd.CommandText = "ProcedureName";    
            mySqlComd.CommandType = CommandType.StoredProcedure;
            mySqlComd.Connection = mySqlConnection;
            SqlParameter depParam = new SqlParameter("@colName1", SqlDbType.NVarChar, 255);
            SqlParameter empParam = new SqlParameter("@colName2", SqlDbType.NVarChar, 20);
            SqlParameter startDateParam = new SqlParameter("@EVcolName3", SqlDbType.DateTime);
            SqlParameter endDateParam = new SqlParameter("@colName4", SqlDbType.DateTime);
            SqlParameter filterParam = new SqlParameter("@colName5", SqlDbType.NVarChar, 20);
            depParam.Value = string.Empty;
            empParam.Value = employeeID;
            DateTime datet = new DateTime(year,month,day);
            string datet1 = datet.ToString();
            //string datet1 = datet.ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'");
           // datet1 = datet1.Substring(0, 19);
            startDateParam.Value = Convert.ToDateTime(datet1.Trim()); ;
            endDateParam.Value = Convert.ToDateTime(datet1.Trim()); ;
            filterParam.Value = string.Empty; 
            mySqlComd.Parameters.Add(depParam);
            mySqlComd.Parameters.Add(empParam);
            mySqlComd.Parameters.Add(startDateParam);
            mySqlComd.Parameters.Add(endDateParam);
            mySqlComd.Parameters.Add(filterParam); 
            mySqlConnection.Open();
            mySqlComd.ExecuteNonQuery();
         reader = mySqlComd.ExecuteReader(CommandBehavior.CloseConnection);

            while (reader.Read())
{
 attendance_date = reader["SITE_IN_TIME"].ToString();
}

            mySqlConnection.Close();
            return attendance_date;

        }
        catch (Exception exp)
        {
            return "Error, Exception: " + exp;
        }
4

2 に答える 2

4

日付形式の問題は、文字列に変換してからDateTime値に戻すためです。特定のサーバーのカルチャ設定によっては、これが機能する場合と機能しない場合があります。また、日付を 2013-10-12 から 2013-12-10 に変換するなど、データを誤って解釈することもあります。

DateTimeすでに持っている値を使用してください:

  DateTime datet = new DateTime(year,month,day);
  startDateParam.Value = datet;
  endDateParam.Value = datet;

サイドノート:

「サーバーは日時をフォーマット「1900-01-01 00:00:00.000」で保存したことに注意してください」

いいえ、そうではありません。日時値は、ある時点を表す数値であり、テキストとして保存されません。

于 2013-10-30T11:35:01.810 に答える
2

パラメータに直接渡すことができDateTimeます。文字列に変換して再度日付に戻す必要はありません。

DateTime datet = new DateTime(year,month,day);
startDateParam.Value = datet;
endDateParam.Value = datet;
于 2013-10-30T11:36:36.387 に答える