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

时间:2015-03-21 11:05:45

标签: c# sql-server datetimepicker

我在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();

5 个答案:

答案 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();

此外,建议您将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();
} 

答案 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 

亲自看看。