如何以某种格式将日期和时间插入 SQL Server 数据库? [复制]

Posted

技术标签:

【中文标题】如何以某种格式将日期和时间插入 SQL Server 数据库? [复制]【英文标题】:How Do I insert Date and Time into SQL Server database in certain format? [duplicate] 【发布时间】:2015-12-15 12:50:53 【问题描述】:

我在 C# 中使用 Windows 窗体。

我正在尝试在包含 DateTime 列的 SQL Server 数据库中填充一个表。

现在,当我的 PC 时钟格式为 dd-MM-yyyy 时,当我尝试使用以下查询插入数据时,出现错误

将 varchar 数据类型转换为 datetime 数据类型导致值超出范围

代码:

 SqlConnection cn = new SqlConnection("Data Source=PCN11-TOSH;Initial Catalog=mydb;Integrated Security=True");
 cn.Open();

 SqlCommand cm = new SqlCommand("Insert into Orders (Order_number, Phone, DateTime, address ) values ('" 
                  + textBox1.Text + "','" + textBox2.Text + "', '"+  DateTime.Now  +"' ,'" 
                  + textBox3.Text + "')");

 cm.Connection = cn;
 cm.ExecuteNonQuery();
 cn.Close();

但是,当我将 PC 的时钟格式更改为 yyyy-MM-dd 时,它工作正常。 SQL Server 好像只接受yyyy-MM-dd 格式。

我的问题是:如何根据我的 PC 的时钟格式 (dd-MM-yyyy) 将 DateTime 插入 SQL Server 列?

谢谢

【问题讨论】:

以通用格式 YYYY-MM-DD 传递它。您可以根据此主题使用 CulturalInfo 格式化日期msdn.microsoft.com/en-us/library/5hh873ya%28v=vs.90%29.aspx 如果你真的想要,那么在 sql server 中的数据类型将是 varchar,然后将日期转换为你想要的格式,也转换为字符串,然后插入。 请注意DateTime 没有格式。这适用于 .Net 数据类型和 SQL 列类型。现在,当您构建 SQL 字符串时,您最终会将 DateTime 格式化为字符串表示形式,然后数据库必须根据某种预期格式对其进行解析,这就是这里的问题。正如一些答案所提到的,解决方案是使用参数来完全避免格式化。 【参考方案1】:

不要连接你的 sql 命令文本,而是使用参数化查询。

它不仅可以保护您免受sql注入,而且它使用强类型参数(例如,参数应该具有SqlDbType.DateTime的类型来传递日期时间值),这样问题就消失了。

var cm = new SqlCommand("Insert into Orders (Order_number, Phone, DateTime) values (@OrderNumber, @Phone, @DateTime)");
cm.Parameters.Add("@OrderNumber", SqlDbType.VarChar);
cm.Parameters["@OrderNumber"].Value = textBox1.Text;
cm.Parameters.Add("@Phone", SqlDbType.VarChar);
cm.Parameters["@phone"].Value = textBox2.Text;
cm.Parameters.Add("@DateTime", SqlDbType.DateTime);
cm.Parameters["@DateTime"].Value = DateTime.Now;

【讨论】:

感谢您的回答。我是 SQL 新手。所以我从您的代码中了解到,您将 dateTime 插入具有 SQL 服务器想要的格式的列中,对吗?最后一个问题: dateTime 列是否可以像我的 PC 一样包含 dd-MM-yyyy 格式?因为即使使用您的代码,该列仍然有 yyyy-MM-dd formate 。谢谢 @naouf 您无法更改 sql server 存储日期时间值的格式。这完全是内部格式,它与dd-MM-yyyyyyyy-MM-dd 没有共同之处,它们只是数据的视觉表示。只需将 C# DateTime 对象作为 sql cpmmand 参数的值传递,就不用担心格式了。 :)

以上是关于如何以某种格式将日期和时间插入 SQL Server 数据库? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

SQL 存储过程查询以清除日期字段(如果为 NULL)

SQL Server CE 中的正确日期时间格式?

PL/SQL 日期插入

在Oracle使用sql语句中如何插入日期格式的数据

php将日期格式转换为mysql格式以进行插入[重复]

将SQL查询出的日期更改格式