T-SQL INSERT语句中的安全日期时间

时间:2011-09-21 13:16:06

标签: c# asp.net sql sql-server tsql

最近在T-SQL INSERT INTO语句中使用DateTime时遇到了问题。在一台计算机上正常工作但在另一台计算机上可能无法正常工作,我想这与区域设置有关。

因此,如果我有一个DateTime变量,在SqlStatement字符串中使用它的安全方法是什么,无论在本地系统设置上它都能工作?

由于

3 个答案:

答案 0 :(得分:9)

使用parameterized INSERT查询。

最有可能的是,您的代码正在组装SQL命令字符串。这也会使您的代码容易受到SQL Injection的攻击。<​​/ p>

答案 1 :(得分:0)

你应该像Adrian建议的那样使用参数化查询。

另一种可能性是使用ISO 8601字符串表示,如描述here,它独立于语言环境设置。

这看起来像是:

20110921 15:20:00

答案 2 :(得分:0)

您可以使用参数化命令/存储过程,其中您在存储中创建DateTime类型的参数,并在调用存储时从.net代码分配它(因此.NET和SQL将知道它们正在使用日期时间并将永远不要混淆/交换日期和月份,或者在插入命令之上包含特定命令,然后使用此模式格式化所有dataetime字符串,例如:

SET DATEFORMAT dmy;

SET DATEFORMAT (Transact-SQL)