如何使用dateTimePicker的以插入日期到SQL数据库日期列?

问题描述 投票:1回答:5

我有型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();
c# sql-server datetimepicker
5个回答
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();

此外,这是一个推荐的最佳实践来把你的SqlConnectionSqlCommandSqlDataReaderusing(....) { .... }块正确进行处理:

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语句从源头应该在格式中使用日期:年月日

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

0
投票

尝试包括引号:

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

我推荐使用的参数太多。


0
投票

试试这个为字符串格式:

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

0
投票

dateTimePicker1/1/1900 12:00:00 AM专卖店值DATETIME所以你如果你想保存它,因为DATETIME的格式是应该使用YYYY-MM-DD HH:MI:SS

您可以使用打印dateTimePicker

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

看到自己。

© www.soinside.com 2019 - 2024. All rights reserved.