我有2个项目,一个是CRUD类,另一个是包含将访问CRUD类的WinForm。
这里出现了我的问题,每当我试图在日期时间列类型的MYSQL中插入默认值的DateTimePicker时,我得到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();
我尝试用messagebox查看值,通过我的WinForm传递的值是好的,没有什么可疑的,它显示了正确知道的每个日期和时间,但是当我查看我的数据库时,我得到的是{ {1}}我不知道是什么原因导致请帮助我找到
答案 0 :(得分:0)
我认为你有一个问题,因为日期时间的字符串格式。 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 injection漏洞。
然后当您不需要解析datetimepicker
的值来键入DateTime
因为ti已经DateTime
(From MSDN: DateTimePicker.Value)
clsDbConnect.property_dtDate = datetimepicker1.Value;