如何使用dateTimePicker将日期插入SQL数据库日期列?

我在sql数据库中有一个Date类型的birthdate列

在我的应用程序中,我使用dateTimePicker来获取出生日期

但是当我试图插入dateTimePicker

我收到一个错误:

’12’附近语法不正确

当我尝试调试代码时,我发现从dateTimePicker获取的值是

日期= {3/21/2015 12:00:00 AM}

代码:

 //cmd is sql command cmd.CommandText="INSERT INTO person (birthdate) VALUES("+dateTimePicker.Value.Date+")"; //con is sql connection con.Open(); cmd.ExecuteNonQuery(); con.Close(); 

真正应该做的是使用参数来避免SQL注入攻击 – 它还让你摆脱字符串格式化日期 – 这也是一件好事!

 //cmd is sql command cmd.CommandText = "INSERT INTO dbo.Person(birthdate) VALUES(@Birthdate);"; cmd.Parameters.Add("@Birthdate", SqlDbType.Date).Value = dateTimePicker.Value.Date; //con is sql connection con.Open(); cmd.ExecuteNonQuery(); con.Close(); 

此外,建议最佳做法是将SqlConnectionSqlCommandSqlDataReader放入using(....) { .... }块以确保正确处理:

 string connectionString = "......."; string query = "INSERT INTO dbo.Person(birthdate) VALUES(@Birthdate);"; using (SqlConnection con = new SqlConnection(connectionString)) using (SqlCommand cmd = new SqlCommand(query, conn)) { cmd.Parameters.Add("@Birthdate", SqlDbType.Date).Value = dateTimePicker.Value.Date; con.Open(); cmd.ExecuteNonQuery(); con.Close(); } 

如前所述,最佳实践是使用参数,但如果您确实需要使用源代码中的TSQL语句,则应使用以下格式的日期:yyyymmdd

 cmd.CommandText="INSERT INTO person (birthdate) VALUES('"+dateTimePicker.Value.Date.ToString("yyyyMMdd")+"')"; 

尝试包括引号:

 cmd.CommandText="INSERT INTO person (birthdate) VALUES('"+dateTimePicker.Value.Date+"')"; 

我也建议使用参数。

试试这个字符串格式:

 cmd.CommandText="INSERT INTO person(birthdate)VALUES('"+dateTimePicker.Value.Date+"')";