在sql查询中使用.net Datetime

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)

Dav*_*d M 7

不要使用字符串连接,使用参数化查询.传入类型的参数值DateTime.这样可以完全避免格式化问题,提高后续查询的性能,并解决在以这种方式形成SQL时您自己打开的固有漏洞(SQL注入).

"where @dateTime <= DateTimeField"
Run Code Online (Sandbox Code Playgroud)

然后设置参数@dateTime.如果您需要更多,请告诉我们您的代码 - 直接ADO.NET,企业库,还有其他什么?


Mar*_*ell 5

参数.始终参数:

where @someVar <= DatetimeField
Run Code Online (Sandbox Code Playgroud)

并使用该值添加名为"@someVar"的参数.

解决(以及其他问题)i18n /编码,连接/注入和查询计划重用的问题.


Chr*_*aas 1

如果您希望 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)