我有型Date
的SQL数据库的生日列
而在我的应用程序使用dateTimePicker
拿到出生日期
但是,当我试图插入来自date
采取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语句从源头应该在格式中使用日期:年月日
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+"')";
dateTimePicker
:1/1/1900 12:00:00 AM
专卖店值DATETIME
所以你如果你想保存它,因为DATETIME的格式是应该使用YYYY-MM-DD HH:MI:SS
。
您可以使用打印dateTimePicker
值
MessageBox.Show(dateTimePicker.Value.ToString());
看到自己。