代码之家  ›  专栏  ›  技术社区  ›  Patrick

在sql查询中使用.net datetime

  •  4
  • Patrick  · 技术社区  · 15 年前

    我有一个datetime对象要与where子句中的sql datetime字段进行比较。我正在使用:

    "where (convert( dateTime, '" & datetimeVariable.ToString & "',103) <= DatetimeField)"
    

    但我相信datetimevariable.tostring将根据系统运行的区域性返回不同的值。

    你将如何处理这一点,使其独立于文化?

    编辑:我不会在这段代码中使用参数化SQL…

    编辑:下面帕玛森对其中一个答案的评论似乎是最好的方法:

    "where (convert( dateTime, '" & datetimeVariable.ToString( "s" ) & "',126) <= DatetimeField)"
    
    3 回复  |  直到 15 年前
        1
  •  1
  •   Chris Haas    15 年前

    如果要始终输出字符串(),而不考虑区域性,请指定特定区域性:

        Dim D = DateTime.Now.ToString(System.Globalization.CultureInfo.InvariantCulture)
        '-or-
        Dim D = DateTime.Now.ToString(New System.Globalization.CultureInfo("en-us"))
    
        2
  •  7
  •   David M    15 年前

    不要使用字符串连接,使用参数化查询。传入类型为的参数值 DateTime . 这完全避免了格式化问题,提高了后续查询的性能,并且避免了以这种方式形成sql时可能遇到的固有漏洞(sql注入)。

    "where @dateTime <= DateTimeField"
    

    然后设置参数 @dateTime . 如果你需要更多,告诉我们更多关于你的代码-直接ADO.NET,企业图书馆,其他什么?

        3
  •  5
  •   Marc Gravell    15 年前

    参数。始终参数:

    where @someVar <= DatetimeField
    

    并用该值添加一个名为“@somevar”的参数。

    解决了i18n/编码、连接/注入和查询计划重用等问题。