我正在尝试检索两列; 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()
答案 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_Date
和App_Time
的类型为datetime,则需要传递相应类型的参数,而不仅仅是字符串。相反,如果这些字段是nvarchar
类型(或其他类型的文本类型),那么您传递字符串,但在这些字段中存储和查询时会遇到问题。