Pat*_*ick 4 .net c# sql vb.net datetime
我有一个DateTime对象,我想与where子句中的sql datetime字段进行比较.我目前正在使用:
"where (convert( dateTime, '" & datetimeVariable.ToString & "',103) <= DatetimeField)"
Run Code Online (Sandbox Code Playgroud)
但我相信datetimeVariable.ToString将返回一个不同的值,具体取决于系统运行的文化.
你会如何处理这一点,因此它与文化无关?
编辑:我不会在这段代码中使用paramatised sql ...
编辑:按照Parmesan对其中一个答案的评论看起来最好的方法可能是:
"where (convert( dateTime, '" & datetimeVariable.ToString( "s" ) & "',126) <= DatetimeField)"
Run Code Online (Sandbox Code Playgroud)
不要使用字符串连接,使用参数化查询.传入类型的参数值DateTime
.这样可以完全避免格式化问题,提高后续查询的性能,并解决在以这种方式形成SQL时您自己打开的固有漏洞(SQL注入).
"where @dateTime <= DateTimeField"
Run Code Online (Sandbox Code Playgroud)
然后设置参数@dateTime
.如果您需要更多,请告诉我们您的代码 - 直接ADO.NET,企业库,还有其他什么?
参数.始终参数:
where @someVar <= DatetimeField
Run Code Online (Sandbox Code Playgroud)
并使用该值添加名为"@someVar"的参数.
解决(以及其他问题)i18n /编码,连接/注入和查询计划重用的问题.
如果您希望 ToString() 始终显示,无论文化如何,请指定特定文化:
Dim D = DateTime.Now.ToString(System.Globalization.CultureInfo.InvariantCulture)
'-or-
Dim D = DateTime.Now.ToString(New System.Globalization.CultureInfo("en-us"))
Run Code Online (Sandbox Code Playgroud)