如何在存储过程中将DateTime格式传递给MS sql server?

时间:2013-10-30 11:21:48

标签: c# sql sql-server datetime

我希望你能在我的项目中帮助我。 我很久以前一直试图解决这个问题而且它不起作用。

我正在尝试将日期时间从c#传递到MS sql server,请注意该服务器 存储日期时间,格式为'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;
        }

2 个答案:

答案 0 :(得分: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' “

不,它没有。日期时间值是表示时间点的数值,它不会存储为文本。

答案 1 :(得分:2)

您可以直接将DateTime传递给您的参数,无需将其转换为字符串并再次返回日期:

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