如何使用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();
此外,建议最佳做法是将SqlConnection
, SqlCommand
和SqlDataReader
放入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+"')";