使用不同的日期系统设置向数据库添加日期

时间:2015-07-09 11:55:43

标签: c# sql-server date datetime datepicker

我想将日期从datepicker保存到sqlserver。

但是当在电脑上使用不同的日期格式时,日期会改变日期和月份。

例如:

  

我系统上的短日期格式:dd-MMM-yyyy

     

DatePicker:2015年7月1日

     

当我将日期保存到我的数据库时,将保存为01-07-2015。

但是当我更改系统日期格式时,日期和月份会发生变化

  

我系统上的短日期格式:dd-MM-yyyy

     

DatePicker:2015年7月1日

     

当我将日期保存到我的数据库时,将保存为07-01-2015。

代码:

//Set dateTimePicker to DateTime variable
DateTime dateSales = dateTimePicker1.Value;

// Create SQL connection
System.Data.SqlClient.SqlConnection sqlConnection1 = new System.Data.SqlClient.SqlConnection(Connection.connectionString());
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand();
cmd.CommandType = System.Data.CommandType.Text;

//Create query with values and execute query
cmd.CommandText = "Insert into CarsSellout (CustomerID, dateSales) VALUES ('" + CustomerID + "', '" + dateSales + ")";
cmd.Connection = sqlConnection1;
sqlConnection1.Open();
cmd.ExecuteNonQuery();
sqlConnection1.Close();

我知道没有参数化的SQL查询!

我该如何解决这个问题?到目前为止,以编程方式更改格式没有运气..!

请帮助我!!

1 个答案:

答案 0 :(得分:4)

您有bad habit as choosing the wrong data type

如果将DateTime值保存到SQL Server,请将它们另存为DateTime NOT 使用字符串表示法保存它们。

这就是为什么,将您的dateSales列类型更改为datetimedatetime2并将dateSales直接传递给您的 parameterized query

DateTime dateSales = dateTimePicker1.Value;

using(var con = new SqlConnection(Connection.connectionString()))
using(var cmd = con.CreateCommand())
{
    cmd.CommandText = "Insert into CarsSellout(CustomerID, dateSales) VALUES(@id, @date)";
    cmd.Parameters.Add("@id", SqlDbType.Int).Value = CustomerID;
    cmd.Parameters.Add("@date", SqlDbType.DateTime).Value = dateSales;

    con.Open();
    cmd.ExecuteNonQuery();
}

我强烈怀疑您的CustomerID应该是数字类型(基于它的名称),这就是为什么在我的示例中将其作为SqlDbType.Int编写的参数。如果不是(由于您使用单引号,则不是这样),请将其参数更改为相关的SqlDbType