代码之家  ›  专栏  ›  技术社区  ›  Jad Chahine

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

  •  2
  • Jad Chahine  · 技术社区  · 9 年前

    我有一个出生日期栏 Date 在sql数据库中

    在我的应用程序中,我使用 dateTimePicker 得到出生日期

    但当我试图插入 date 日期时间选择器 :

    我收到一个错误:

    “12”附近的语法不正确

    当我尝试调试代码时,我发现 日期时间选择器

    日期= {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 回复  |  直到 8 年前
        1
  •  13
  •   marc_s    9 年前

    真正地 应该做的是使用 参数 避免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();
    } 
    
        2
  •  2
  •   DMVC    9 年前

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

    cmd.CommandText="INSERT INTO person (birthdate) VALUES('"+dateTimePicker.Value.Date.ToString("yyyyMMdd")+"')";
    
        3
  •  0
  •   Brian Mains    9 年前

    尝试包含引号:

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

    我也建议使用参数。

        4
  •  0
  •   Eric Aya    7 年前

    尝试使用字符串格式:

    cmd.CommandText="INSERT INTO person(birthdate)VALUES('"+dateTimePicker.Value.Date+"')";
    
        5
  •  0
  •   0xInfection Muhammad Faizan Fareed    6 年前

    dateTimePicker 将值存储为 1/1/1900 12:00:00 AM 所以你应该使用 DATETIME 如果由于DATETIME的格式为: YYYY-MM-DD HH:MI:SS .

    您可以打印 日期时间选择器 使用的值

    MessageBox.Show(dateTimePicker.Value.ToString());
    

    自己看看。