2015-04-29 78 views
0

我目前正在使用Microsoft Visual Studio 2013 for Windows Desktop。我正在使用带有SQL后端的Windows窗体应用程序。我目前正在创建一个时间表,我需要能够使用smalldatetime数据类型搜索几个时间表列。我试图用类似的子句输入日期时间,但它似乎不工作。我曾尝试在SQL Server管理工作室计划以及没有成功。这里是我的代码:运行SQL在vb.net中使用日期时间选择器选择日期的查询

MsgBox(DateTimePicker1.Value.ToString("yyyy-mmy-dd")) 
    Try 
     Using conn1 As New SqlConnection(connstring) 
      conn1.Open() 
      Using comm1 As New SqlCommand("SELECT col1, col2, col3, " _ 
        & "col4, col5, col6, col7, col8, " _ 
        & "col9, Col10, Col11, Col12, " _ 
        & "Col13, Col14, Col15, " _ 
        & "Col16, Col17, " _ 
        & "Col18, Col19, " _ 
        & "Col20, Col21 FROM table1 LEFT JOIN table2 " _ 
        & "ON table2.col2 = table1.col2 Left Join table3 ON " _ 
        & "table2.col1 = table3.col2 Left JOIN table4 ON " _ 
        & "table2.col5 = table4.col5 WHERE Complete IS NULL" _ 
        & " AND " _ 
        & "table1.col7 Like '@Date%'", conn1) 
       comm1.Parameters.AddWithValue("@Date", DateTime Picker.Value.ToString("yyyy-mm-dd")) 
       Dim dt As New DataTable 
       Dim sql As New SqlDataAdapter(comm1) 
       sql.Fill(dt) 
       Datagridview.DataSource = dt 
      End Using 
      conn1.Close() 
     End Using 

     Call Paint() 

    Catch ex As Exception 
     MsgBox(ex.ToString) 

    End Try 
+0

col7的数据类型是什么?约会时间? – Carl

+0

它是一个smalldatetime列数据类型 – Cheddar

+0

那么数据库中的日期有一个非零时间,或者它是00:00:00? –

回答

1

Like语句实际上是用于字符串。如果col7是一个smalldatetime,那么你真的应该使用某种日期比较。由于您使用的是Like,我的猜测是该列可能包含时间信息,并且您希望为特定日期返回所有记录。我不经常使用smalldatetime,但对于日期时间列,简单的解决方案是将列转换为日期,然后将其与DateTime选择器传递的日期参数进行比较。这当然假设你使用SQL Server 2008及更高版本,因为直到那时日期数据类型才存在。

另一种解决方案是更新where子句,如下所示,假定@Date不包含时间信息。

table1.col7 >= @Date and table1.col7 < dateadd(day, 1, @Date) 
+0

这工作,我不得不改变我的日期从小写mm到大写MM到不同的月份,将更新我的代码,谢谢。 – Cheddar

相关问题