我想将日期从dateTimePicker插入到phpmyadmin的mysql数据库中,但是当我点击保存mysql数据库的日期变成毛坯时
这是我的代码
private void save2()
{
cmd.Connection = cn;
cn.Open();
for (int i = 0; i < ((dataGridView1.Rows.Count) - 1); i++)
{
MySqlCommand cmd2 = new MySqlCommand();
cmd2.Connection = cn;
cmd.CommandText = "Insert into lumugada.inventory(Nama_Product,Brand,Category,Deskripsi,Currency,Qty,Price,Total_Price,Nama_Supplier,Date,Remark) Values('" + dataGridView1.Rows[i].Cells["Column1"].Value + "','" + dataGridView1.Rows[i].Cells["Column2"].Value + "','" + dataGridView1.Rows[i].Cells["Column6"].Value + "','" + dataGridView1.Rows[i].Cells["Column8"].Value + "','" + dataGridView1.Rows[i].Cells["Column9"].Value + "','" + dataGridView1.Rows[i].Cells["Column3"].Value + "','" + dataGridView1.Rows[i].Cells["Column4"].Value + "','" + dataGridView1.Rows[i].Cells["Column5"].Value + "','" + txtNs.Text + "','" + dateTimePicker1.Value.Date + "','" + dataGridView1.Rows[i].Cells["Column12"].Value + "')";
cmd.ExecuteNonQuery();
cmd.Clone();
//cmd.ExecuteNonQuery();
}
cn.Close();
}
怎么了? 有人可以帮忙吗。
答案 0 :(得分:0)
日期的字符串represantation必须采用MySQL理解的格式。那是:&#34;年 - 月 - &#34;。
来自mysql手册
&#34;日期部分必须始终以年 - 月 - 日的顺序给出(例如,&#39; 98-09-04&#39;),&#34;。
您可以将日期字符串格式化为匹配正确的格式
string.Format("{0:000}-{1:00}-{2:00}", date.Year, date.Month, date.Day);
或者您可以使用参数化查询,为日期&#34; @ date&#34; 设置占位符 然后将参数添加到查询
command.Parameters.AddWithValue("@date", date);
答案 1 :(得分:0)
在命令中使用引号并添加这样的值有两个主要缺点:
这意味着每个不是nvarchar的字段都会对nvarchar进行不适当的转换。这适用于您的Datetime
字段日期。
要解决这两个问题,请使用参数:
md.CommandText = "Insert into lumugada.inventory(Nama_Product,Brand,Category,Deskripsi,Currency,Qty,Price,Total_Price,Nama_Supplier,Date,Remark) Values(@Product,@Category,@Desk,@Currency,@Qty,@Price,@TotalPrice,@Supplier,@Date,@Remark)";
cmd.Parameters.Add("@Product").Value=dataGridView1.Rows[i].Cells["Column2"].Value ;
...
...
cmd.Parameters.Add("@Date",SqlDbType.DateTime).Value=dateTimePicker1.Value.Date;
请记住,默认SqlDbType
是nvarchar,因此您必须为那些确实是nvarchar的字段指定它,但是对于Date
字段,您必须设置
SqlDbType.DateTime