将dateTimePicker插入MySql phpmyadmin数据库

时间:2014-10-16 11:30:23

标签: c# mysql datetimepicker

我想将日期从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();        
        }

怎么了? 有人可以帮忙吗。

2 个答案:

答案 0 :(得分:0)

日期的字符串represantation必须采用MySQL理解的格式。那是:&#34;年 - 月 - &#34;。

来自mysql手册

  

&#34;日期部分必须始终以年 - 月 - 日的顺序给出(例如,&#39; 98-09-04&#39;),&#34;。

MySQL Manual

您可以将日期字符串格式化为匹配正确的格式

string.Format("{0:000}-{1:00}-{2:00}", date.Year, date.Month, date.Day);

或者您可以使用参数化查询,为日期&#34; @ date&#34; 设置占位符 然后将参数添加到查询

command.Parameters.AddWithValue("@date", date);

答案 1 :(得分:0)

在命令中使用引号并添加这样的值有两个主要缺点:

  • 您的查询会受到注入(如评论中所述)
  • 对于每个值,在sql
  • 中都有一个转换为nvarchar类型

这意味着每个不是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