我有2个项目,一个是CRUD类,另一个是包含一个将访问CRUD类的WinForm。我的问题来了,每次我尝试在 MYSQL 中使用日期时间列类型插入具有默认值的日期时间选择器时,我都会得到0000-00-00 00:00:00
零零零值,我在这里错过了什么?
这是我的CRUD类代码的一部分,我的CRUD类名为DBConnect.cs
public DateTime property_dtDate { get; set; }
sqlQuery = "INSERT INTO master (NoInvoice, Name, Date, Type, Additionaltext) VALUES ('" + property_NoInvoice + "', '" + property_sName + "', '" + property_dtDate + "', '" + property_sType + "', '" + property_sAdditionalText + "')";
这是我的 WinForm 代码部分,我将其命名为 Form1.cs(两者都在单独的项目中)
clsDbConnect.property_dtDate = DateTime.Parse(datetimepicker1.Value.ToString("yyyy-MM-dd HH:mm:ss"));
clsDbConnect.Insert();
我尝试使用消息框查看值,通过我的 WinForm 传递的值很好,没有什么可疑的,它显示了正确的每个日期和时间,但是当我查看我的数据库时,我得到的只是0000-00-00 00:00:00.
我不知道是什么原因,请帮助我找出
我认为由于日期时间的字符串格式而遇到问题。 MySQL
不理解字符串格式为datetime
值。
尝试使用参数(假设在代码中的某个地方有一个 SqlCommand 对象):
string query = "INSERT INTO master (NoInvoice, Name, Date, Type, Additionaltext) VALUES (@NoInvoice, @sName, @dtDate, @sType, @sAdditionalText)";
using(SqlCommand command = New SqlCommand(query, yourconnection)
{
command.Parameters.AddWithValue("@NoInvoice", property_NoInvoice);
command.Parameters.AddWithValue("@sName ", property_sName);
command.Parameters.AddWithValue("@dtDate ", property_dtDate);
command.Parameters.AddWithValue("@sType ", property_sType);
command.Parameters.AddWithValue("@sAdditionalText ", property_sAdditionalText);
command.ExecuteNonQuery();
}
使用参数有助于解决类型安全(日期时间和数字格式问题)并防止 SQL 注入漏洞。
然后,当您不需要解析datetimepicker
的值以键入DateTime
时,因为 ti 已经DateTime
(来自 MSDN:DateTimePicker.Value)
clsDbConnect.property_dtDate = datetimepicker1.Value;