如何根据输入的日期插入日期和检索记录

时间:2013-08-11 18:33:21

标签: database vb.net sql-server-ce

我是一名PHP-MySql Guy&新的 vb.net& SQL Server CE。
如何根据日期处理记录?

考虑任何表格( tbl_demo ),其中一些列包含1列以存储今天的日期。

 For example (table structure)-     Id     Name       today
                                    --     -----      -----
                                    int    nvarchar   datetime

如果我在表格中有以下数据 -

 Id     Name       today
 --     -----      -----
 1      vikram     11/08/2013 11:16:57 PM

那么如何通过仅向查询提供 11/08/2013 来检索此记录?

PS-
我在执行查询时面临以下问题(这里是代码片段) -

 Dim Ddate As Date
 Ddate = MonthCalendar1.SelectionRange.Start.ToString

SQLquery = "SELECT id,today FROM tbl_demo WHERE today = '" & Ddate & "'"

错误:The data type is not valid for the boolean operation.[Data type (if known) = datetime,Data type (if known) = nvarchar]

3 个答案:

答案 0 :(得分:0)

虽然最好在where子句的字段中使用函数(性能明智),但这样做可以完成。

"SELECT id,today FROM tbl_demo WHERE CONVERT(DATETIME,CONVERT(VARCHAR,today,120)) = CONVERT(DATETIME,CONVERT(VARCHAR,'" & Ddate.ToString() & "',120))"

另一种方法是直接向ISO格式提供日期:

"SELECT id,today FROM tbl_demo WHERE CONVERT(DATETIME,CONVERT(VARCHAR,today,120)) = CONVERT(DATETIME,CONVERT(VARCHAR,'" & Ddate.ToString("yyyyMMdd") & "',120))"

我不确定它是否为SQL CE的yyyyMMdd或yyMMdd,所以最好尝试两者。

根据this MSDN article它应该是“yyMMdd”但它可能是一个错字...

答案 1 :(得分:0)

在试验期间...我的工作方式如下(如果我错了,请纠正我)

    Dim Ddate As Date
    Dim d, m, y
    Ddate = MonthCalendar1.SelectionRange.Start.ToString
    d = Ddate.ToString("dd")
    m = Ddate.ToString("MM")
    y = Ddate.ToString("yyyy")  

查询是:

SQLquery = "SELECT billId,c_id,amount FROM tbl_outward WHERE (DATEPART(dd, ddate) = '" & d & "' AND DATEPART(mm, ddate) = '" & m & "' AND DATEPART(yyyy, ddate) = '" & y & "')"

答案 2 :(得分:0)

这是使用数据读取器的完整示例。如果您要一次处理一行,这是合适的。如果您需要保留内存中的所有行或执行进一步的操作,您可能需要使用ExecuteDataSet来获取值。

此示例将行值打印到命令行。

Dim recordDate as DateTime = new DateTime(2013,8,11)
Using connection As SqlCeConnection = New SqlCeConnection("Data Source=Database.sdf;Persist Security Info=False;")

    connection.Open()

    Using command As SqlCeCommand = connection.CreateCommand()
        command.CommandText = "Select id, name, today from demo where today = @date"
        Dim dateParameter As SqlCeParameter
        dateParameter = New SqlCeParameter("@date", DbType.DateTime)
        dateParameter.Value = recordDate
        command.Parameters.Add(dateParameter)

        Using reader As SqlCeDataReader = command.ExecuteReader()
            Do While reader.Read()
                Dim id As Integer = reader.GetInt32(0)
                Dim name As String = reader.GetString(1)
                Dim today As DateTime = reader.GetDateTime(2)
                Console.WriteLine("{0,-4} {1,-10} {2,-10}", id, name, today)
            Loop

        End Using

    End Using
End Using

需要注意的一些重要事项:

  • 使用语句会在您完成后自动清除未使用的资源
  • 使用的sql语句是参数化的,它允许您传入强类型值而不是字符串。

Console.WriteLine的第一个参数是字符串格式。 {0,-4}是一个占位符,将由下一个参数填充。 -4表示该值应显示为左对齐,列为4个字符宽。有关详细信息,请参阅MSDN上的String.Format方法文档。