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

Posted

技术标签:

【中文标题】如何使用 dateTimePicker 将日期插入 SQL 数据库日期列?【英文标题】:How to INSERT date into SQL database date column using dateTimePicker? 【发布时间】:2015-03-21 11:05:45 【问题描述】:

我在 sql 数据库中有一个 Date 类型的生日列

在我的应用程序中,我使用dateTimePicker 来获取出生日期

但是当我尝试插入取自dateTimePickerdate 时:

我收到一个错误:

'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();

【问题讨论】:

***.com/questions/12957635/… SQL Injection alert - 你应该将你的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入 还要检查表中生日的数据类型 【参考方案1】:

真正应该做的是使用 参数 来避免 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();
 

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

尝试包括引号:

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

我也建议使用参数。

【讨论】:

【参考方案4】:

试试这个字符串格式:

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

【讨论】:

你在VALUES之前忘记了一个空格【参考方案5】:

dateTimePicker 将值存储为 1/1/1900 12:00:00 AM,因此如果您尝试存储它,则应使用 DATETIME,因为 DATETIME 的格式为:YYYY-MM-DD HH:MI:SS

您可以使用

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

亲眼看看。

【讨论】:

添加更多信息。

以上是关于如何使用 dateTimePicker 将日期插入 SQL 数据库日期列?的主要内容,如果未能解决你的问题,请参考以下文章

您如何使用 JS 或 jQuery 从引导 datetimepicker 中控制台记录日期 [重复]

如何将使用 datetimepicker 获得的值转换为日期和时间?

如何将 DateTimePicker 控件设置为特定日期?

如何设置我的 datetimepicker 日期?

DateTimePicker:选择日期和时间

如何在默认情况下停止 datetimepicker 在文本框中设置今天的日期 onclick