2013-10-16 111 views
0

我正在尋找投下兩個變量的日期。施放兩個變量

我可以讓SQL爲鑄造一個(第一個代碼)工作,但是當我想投兩個變量時,我總是收到錯誤(請參閱下面的兩個嘗試)。

我已經搜索了雙精度型並且投了兩個變量,但雙精度型的雙精度型和變量有相同的問題。我應該尋找什麼樣的工作或者需要什麼樣的「連接」來投射兩個變量。

  • 一個鑄造(工作)

    cmd.CommandText = 「SELECT datestart,DateEnd,runco​​mpleted FROM [tblweeklyreports]其中角色(如datestart日期)之間「」 vDateStart & & 「 '和'」 & vDateStart & 「'」

- 兩投(不工作)

sSQL = "SELECT datestart, DateEnd, runcompleted FROM [tblweeklyreports] where Cast(moduledatestart as date, moduledatecomplete as date) between '" & vDateStart & "' and '" & vDateEnd & "'" 

sSQL = "SELECT datestart, DateEnd, runcompleted FROM [tblweeklyreports] where Cast(moduledatestart as date),(moduledatecomplete as date) between '" & vDateStart & "' and '" & vDateEnd & "'" 

必須之前拿出(鏈接是我需要的,但我似乎無法尋找正確的措辭!)

-------- -----------修訂版本按照討論--------------

Dim cn As SqlConnection = New SqlConnection() 
     Dim cmd As SqlCommand = New SqlCommand() 
     Dim dr As SqlDataReader 
     Dim vRunCompleted As String = "" 
     Dim vDateStartExist As String = "" 
     cn.ConnectionString = ConfigurationManager.ConnectionStrings("mySQLConnectionString").ConnectionString 
     cmd.Connection = cn 
     'Open the connection to the database 
     cn.Open() 

昏暗vDateStartDate作爲日期= vDateStart 昏暗vDateEndDate作爲日期= vDateEnd

 cmd.CommandText = "SELECT * FROM [tblresults] where moduledatestart between @from and @to" 
     cmd.Parameters.AddWithValue("@from", vDateStart) 
     cmd.Parameters.AddWithValue("@to", vDateEnd) 

     Dim str As New StringBuilder 
     Dim vdrOkay As String 
     str.Append(Chr(34) & " Employee Id" & Chr(34) & "," & "Forename" & "," & Chr(34) & "Surname" & Chr(34) & "," & "Control 1" & "," & Chr(34) & "Control 2" & Chr(34) & "," & "Full code" & "," & "Class Name" & "," & "Year" & ",") 
     str.Append(Chr(34) & " Number" & Chr(34) & "," & "Class Start Date" & "," & Chr(34) & "Class End Date" & Chr(34) & "," & "Course Type" & "," & Chr(34) & "Provider Type" & Chr(34) & "," & "Provider" & "," & "Venue" & "," & "Evaluation" & "," & "Duration Hrs" & ",") 
     str.Replace(",", vbNewLine, str.Length - 1, 1) ' go to next line 

     dr = cmd.ExecuteReader() 

     If (dr.HasRows = True) Then 

      Label1.Text = "running" 

      While (dr.Read()) 

       vdrOkay = Trim(StrConv(dr("EmployeeID"), VbStrConv.Uppercase)) 
       str.Append("=" & Chr(34) & vdrOkay & Chr(34) & ",") 

End While 

      Dim vFileName As String = Replace(vDateStart, "/", "_") & "_" & Replace(vDateEnd, "/", "_") 
      My.Computer.FileSystem.WriteAllText(("C:\sites\Examples\WeeklyReport\" & "ELearning_Report_" & vFileName & ".csv"), str.ToString, False) 

     Else 
Label1.Text = "did not run" 
     End If 
+2

您應該使用參數化查詢。 –

+0

編輯顯示在底部 – indofraiser

回答

4

如果您推薦使用參數化查詢,並且避免SQL注入的附加效果更好,則無需任何操作。

在你的情況,這可能是這樣的:

cmd.CommandText = "SELECT datestart, DateEnd, runcompleted FROM [tblweeklyreports] where datestart between @from and @to" 
cmd.Parameters.AddWithValue("@from", vDateStart) 
cmd.Parameters.AddWithValue("@to", vDateEnd) 

問題就出在你構建你的WHERE條款的方式。當你嘗試時,你無法一次比較兩個字段。你需要這樣寫:

SELECT 
    datestart, 
    DateEnd, 
    runcompleted 
FROM [tblweeklyreports] 
where 
    moduledatestart between @from and @to and 
    moduledatecomplete between @from and @to 

然後使用上面的SQL參數。

+0

這不是問題所在。這個問題是一個SQL誤解,他試圖將兩列與單一條件進行比較,並用逗號分隔列。 – lolol

+0

啊,我明白了。去修復我的答案 –

+0

另外:'.AddWithValue()'是不好的。不要使用它。 –