我在sql database
中有一个类型为Date
的生日列
在我的申请中,我使用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();
答案 0 :(得分:8)
你真正应该做的是使用参数来避免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();
}
答案 1 :(得分:2)
如前所述,最佳做法是使用参数,但如果您确实需要使用源代码中的TSQL语句,则应使用以下格式的日期:yyyymmdd
cmd.CommandText="INSERT INTO person (birthdate) VALUES('"+dateTimePicker.Value.Date.ToString("yyyyMMdd")+"')";
答案 2 :(得分:0)
尝试包含引号:
cmd.CommandText="INSERT INTO person (birthdate) VALUES('"+dateTimePicker.Value.Date+"')";
我也建议使用参数。
答案 3 :(得分:0)
尝试使用字符串格式:
__
答案 4 :(得分:0)
dateTimePicker
将值存储为1/1/1900 12:00:00 AM
,因此,由于DATETIME的格式为DATETIME
,因此如果要存储YYYY-MM-DD HH:MI:SS
,则应使用dateTimePicker
。
您可以使用来打印MessageBox.Show(dateTimePicker.Value.ToString());
值
class SessionGen (Users):
def _d_session_id_generator(self):
d_session_id = 0
def thing(self):
nonlocal d_session_id
d_session_id += 1
return str(d_session_id)
return thing
亲自看看。