2013-10-30 27 views
1

我希望你能在我的项目中帮助我。 我一直试图解决这个问题很久以前,它不工作。如何在存储过程中将DateTime格式传递给MS sql server?

我试图通过从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; 
     } 
+8

你什么错误? –

+0

当你说“服务器存储格式的日期时间”,你是什么意思?它是否存储为字符串? – Szymon

+1

@Szymon否它存储为DateTime,这意味着日期时间格式 – Alaa12

回答

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'“

不,它没有。日期时间值是表示时间点的数字值,它不是以文本形式存储的。

+0

这也将是一个问题,因为它不匹配服务器格式 – Alaa12

+0

@ Alaa12根本没有服务器格式。 DateTime数据类型在.NET代码和SQL Server中都是二进制的。 – Szymon

+3

@Alaa12:当您将'DateTime'值放入参数中时,它根本没有任何格式,因此没有可能不匹配的格式。 – Guffa

2

您只需直接传递DateTime到您的参数,也没有必要将其转换为字符串,然后再返回到日期:

DateTime datet = new DateTime(year,month,day); 
startDateParam.Value = datet; 
endDateParam.Value = datet; 
相关问题