2016-08-22 90 views
0

我想“的DateTimePicker”的值插入类型的列“日期”,当一个问题插入日期值转换成C#SQL数据库

cmd = new SqlCommand("insert into PIECE_D_IDENDITE VALUES('" + textBox4.Text + "','" + dateTimePicker2.Value + "','" + textBox7.Text + "','" + comboBox1.SelectedValue + "');insert into PERSONNE (ID_CARTE,PRENOM_PERSONNE,NOM_PERSONNE,PROFESSION_PERSONNE,TEL_PERSONNE,ADRESSE_PERSONNE,DATE_NAIS_PERSONNE)values('" + textBox4.Text + "','" + textBox1.Text + "','" + textBox2.Text + "','" + textBox8.Text + "','" + textBox10.Text + "','" + textBox9.Text + "','" + dateTimePicker1.Value + "')", cn); 
       cn.Open(); 
       cmd.ExecuteNonQuery(); 
       MessageBox.Show("success!"); 

所以,问题是,当我选择了一天的数量最大比12(例如13/10/2016)出现此错误=>“从字符串转换日期和/或时间时转换失败。”

+3

使用参数ALWAYS – Steve

+6

首先要做的事:停止将值放入SQL中。你开放自己的SQL注入攻击。现在开始使用参数化的SQL **。作为一个令人愉快的副作用,这将解决你有的转换问题,因为你不会依赖于本地计算机上的日期格式... –

+0

@JonSkeet你可以给我一个使用参数化SQl的例子请在这种情况下请..我是C#的初学者#C# –

回答

2

您必须始终使用参数化SQL,并且不要转换为字符串,尤其是Date \ DateTimes。

SqlCommand cmd = new SqlCommand(@"insert into PIECE_D_IDENDITE VALUES 
    (@v1, @v2, @v3, @v4); 
insert into PERSONNE 
(ID_CARTE,PRENOM_PERSONNE,NOM_PERSONNE, 
PROFESSION_PERSONNE,TEL_PERSONNE, 
ADRESSE_PERSONNE,DATE_NAIS_PERSONNE) 
values 
(@ID_CARTE,@PRENOM_PERSONNE,@NOM_PERSONNE, 
@PROFESSION_PERSONNE,@TEL_PERSONNE, 
@ADRESSE_PERSONNE,@DATE_NAIS_PERSONNE);", cn); 


cmd.Parameters.AddWithValue("@v1", textBox4.Text); 
cmd.Parameters.AddWithValue("@v2", dateTimePicker2.Value); 
cmd.Parameters.AddWithValue("@v3", textBox7.Text); 
cmd.Parameters.AddWithValue("@v4", comboBox1.SelectedValue); 

cmd.Parameters.AddWithValue("@ID_CARTE", textBox4.Text); 
cmd.Parameters.AddWithValue("@PRENOM_PERSONNE", textBox1.Text); 
cmd.Parameters.AddWithValue("@NOM_PERSONNE", textBox2.Text); 
cmd.Parameters.AddWithValue("@PROFESSION_PERSONNE", textBox8.Text); 
cmd.Parameters.AddWithValue("@TEL_PERSONNE", textBox10.Text); 
cmd.Parameters.AddWithValue("@ADRESSE_PERSONNE", textBox9.Text); 
cmd.Parameters.AddWithValue("@DATE_NAIS_PERSONNE", dateTimePicker1.Value); 

cn.Open(); 
cmd.ExecuteNonQuery(); 
MessageBox.Show("success!"); 

在第一次插入时,您没有指定字段名称。这将工作,但取决于字段的顺序和危险的恕我直言(我假设除日期以外的所有字段都是字符串类型,如果没有,将它们转换为它们相应的类型)。

+0

它像一个神奇的工作!多谢兄弟 –

-1

此问题与您的表单/服务器的本地日期配置以及返回的值有关。

如果本地日期格式为MM/DD/YYY,并且在调用过程之前未进行转换,则第13天将以日期的MM格式存储到数据库中。

我不知道你的MySQL配置或Winform配置,但我很确定这个问题是客户端/服务器上不同的日期格式。