我想将日期从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查询!
我该如何解决这个问题?到目前为止,以编程方式更改格式没有运气..!
请帮助我!!
答案 0 :(得分:4)
您有bad habit as choosing the wrong data type。
如果将DateTime
值保存到SQL Server,请将它们另存为DateTime
。 NOT 使用字符串表示法保存它们。
这就是为什么,将您的dateSales
列类型更改为datetime
或datetime2
并将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
。