2015-04-29 18 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

相關問題