在vb .net应用程序中转换日期时间

时间:2014-03-17 00:36:35

标签: sql sql-server vb.net date datetime

我在日期时间格式转换中遇到问题。在我的数据库表中,我有一个列jour,其格式如下:

01/02/2014 00:00:00

DD/MM/YYYY 00:00:00。当我这样做时:

        Dim date1 As String = Session("date1")
        Dim date2 As String = Session("date2")
        Dim datefirst As DateTime
        Dim dateSecond As DateTime
        Try
            datefirst = DateTime.Parse(date1)
            dateSecond = DateTime.Parse(date2)
        Catch ex As Exception

        End Try
        Dim report As ReportDocument = New ReportDocument()
        Dim reportPath As String = Server.MapPath("Reports\Prix.rpt")
        Dim ds As DataSet
        Dim cnn As SqlConnection
        Dim connectionString As String = "Data Source=HP-PC\SQLEXPRESS;Initial Catalog=ReportingFormation;Integrated Security=True;Pooling=False"
        Dim sql As String = ""
        Dim dscmd As SqlDataAdapter
        cnn = New SqlConnection(connectionString)
        cnn.Open()

        sql = "SELECT * FROM PrixProduit where ( Jour >= '" + datefirst + "'and Jour <='" + dateSecond + "')"
        dscmd = New SqlDataAdapter(sql, cnn)
        ds = New DataSet()

        dscmd.Fill(ds, "PrixProduit")

使用以下值:   date1 = 30/01/2014   date2 = 06/02/2014   datefirst = #1/30/2014#   dateSecond = #2/6/2014#

所以我收到了这个错误

The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.

在这行代码中:

dscmd.Fill(ds, "PrixProduit")

所以我需要知道

  • 出现此错误的原因是什么?
  • 我该如何解决?

2 个答案:

答案 0 :(得分:1)

对于这种情况,您有两个选择,首先是在应用程序中更改date以匹配数据库中的date。其次是在convert期间包含样式。以下是尝试convert varchardate字段的示例。第一个select将失败。但第二个会起作用,因为我指的是我期待字符串的style

DECLARE @datechar VARCHAR(12) = '16/03/2014'

SELECT CONVERT(DATE, @datechar)

SELECT CONVERT(DATE, @datechar, 103)

您需要将SQL代码修改为以下

sql = "SELECT * FROM PrixProduit where ( Jour >= Convert(date,'" + datefirst + "',103 ) and Jour <= Convert(date,'" + dateSecond + "',103))"

就像人们已经提到的那样,你应该避免串联使你的应用程序容易出现sql注入。因此,请将代码修改为此。

sql = "SELECT * FROM PrixProduit where Jour >= Convert(date,@datefirst,103 ) and Jour <= Convert(date,@datesecond,103)"

之后只需在命令中添加参数。

答案 1 :(得分:1)

假设您使用美国日期时间格式MM / DD / YYYY。将此行更改为:

sql = "SELECT * FROM PrixProduit where ( Jour >= '" + datefirst.ToString("MM/dd/yyyy") + "' and Jour <='" + dateSecond.ToString("MM/dd/yyyy") + "')"

ToString(&#34; MM / dd / yyyy&#34;)明确地将日期时间转换为格式MM / dd / yyyy以避免默认转换,这可能不是我们想要的。

我还应该在你的解释中指出:

&#34;使用这些值:date1 = 30/01/2014 date2 = 06/02/2014 datefirst =#1/30/2014#dateSecond =#2/6/2014#....&#34 ;

date1中的值是&#39; 30/01 / 2014&#39;。如果这不是拼写错误,您可能会收到错误

"The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value."