在Visual Basic中有两个条件的sql select语句

时间:2014-09-24 12:02:06

标签: sql-server vb.net

我正在尝试检索两列; App_ID&来自使用vb的sql server数据库的表su_Appointments的App_Slot,我有两个条件:Date和Time; App_Date&查询的App_Time,现在当我运行查询时,它会抛出错误说:“2014'附近的语法不正确”。查询如下 我将把App_ID存储到变量AP_ID

CODE

 Using Query As New SqlCommand("Select App_ID From su_Appointments Where (App_Date = ' and  App_Time = ' )" & DT & TM, sqlcon)
   sqlcon.Open()
   Dim dr As SqlDataReader = Query.ExecuteReader()
   While dr.Read()
   AP_ID = dr(0)
   End While
End Using
sqlcon.Close()

1 个答案:

答案 0 :(得分:2)

嗯,你的语法实际上是错误的

SELECT语句需要

SELECT <fieldA>, <FieldB>, .... 
FROM <Table> 
WHERE <FieldX> = <Condition1> AND <FieldZ> = <Condition2>

但是,从这个基本错误的一部分,您需要开始使用参数化查询方法

Using sqlcon = new SqlConnection(.....connectionstring...)
    Dim cmdText = "Select App_ID From su_Appointments Where App_Date =@dt and App_Time = @tm" 
    Using Query = New SqlCommand(cmdText, sqlcon)
       sqlcon.Open()
       Query.Parameters.AddWithValue("@dt", DT)
       Query.Parameters.AddWithValue("@tm", TM)
       Using dr =Query.ExecuteReader()
           While dr.Read()
             AP_ID = dr(0)
           End While
       End Using
    End Using
End Using

使用参数化查询,您将获得许多好处。没有Sql Injection Attacks的可能性,您的命令文本更清晰易懂,参数被处理为代码本身的正确引用,因此您不需要检查字符串中的单引号或格式正确的日期和十进制数。

最终,您可能会遇到其他问题。如果列App_DateApp_Time的类型为datetime,则需要传递相应类型的参数,而不仅仅是字符串。相反,如果这些字段是nvarchar类型(或其他类型的文本类型),那么您传递字符串,但在这些字段中存储和查询时会遇到问题。