2013-07-09 22 views
0

我打算使用自动完成Ajax控件对姓和名进行搜索。但是我得到错误在预期条件的上下文中指定的非布尔类型的表达式,在','附近。任何想法我做错了什么?字(0)行出现错误。 谢谢!Select语句在预期条件的上下文中指定的非布尔类型的表达式,在','附近

Public Function GetCompletionList(prefixText As String, count As Integer, ByVal contextKey As String) As String() 
    Try 
     Dim words As String() = prefixText.Split(New Char() {","c}) 
     Dim Con As SqlConnection 
     Dim cmd As SqlCommand 
     Con = New SqlConnection 
     Dim test As String 
     test = contextKey 
     Con.ConnectionString = "" 
     Con.Open() 

     cmd = New SqlCommand 
     cmd.Connection = Con 
     cmd.CommandText = "SELECT NPI, [Entity Type Code], [Provider Last Name (Legal Name)], [Provider First Name],[Provider First Line Business Mailing Address], [Provider Business Mailing Address City Name], [Provider Business Mailing Address State Name], [Provider Business Mailing Address Postal Code] FROM NPIData WHERE ([Provider Business Mailing Address State Name] = @State) AND ('" & words(0) & "','" & words(1) & "' LIKE N'%' + @Provider + N'%') ORDER BY [Provider First Name]" 
     cmd.Parameters.AddWithValue("@Provider", prefixText) 
     cmd.Parameters.AddWithValue("@State", contextKey) 
     Dim customers As List(Of String) = New List(Of String) 
     Dim reader As SqlDataReader = cmd.ExecuteReader() 


     While reader.Read 
      customers.Add(reader("Provider Last Name (Legal Name)").ToString + ", " + reader("Provider First Name").ToString + " " + reader("Provider First Line Business Mailing Address").ToString + " " + reader("Provider Business Mailing Address City Name").ToString + ", " + reader("Provider Business Mailing Address State Name").ToString + " " + reader("Provider Business Mailing Address Postal Code").ToString + " " + reader("NPI").ToString) 

     End While 


     Con.Close() 

     Return customers.ToArray 
    Catch ex As Exception 

    End Try 

End Function 
+2

您的代码导致这样的查询:'SELECT ... FROM N PIData WHERE([Provider Business Mailing Address State Name] = @State)AND('word_1','word_2'LIKE N'%'+ @Provider + N'%')ORDER BY [Provider First Name]'(选择列表省略为简洁起见)用'LIKE'来看看零件。这是无效的SQL。你究竟想在这里实现什么? –

+0

你能打印分配给cmd.CommandText的文本吗? – Madhivanan

+0

我只是试着再次运行它,得到的索引超出了数组的范围。 – user1342164

回答

0

在你说你是失败的,你行有

('" & words(0) & "','" & words(1) & "' LIKE N'%' + @Provider + N'%') 

如果字(0)包含TXT1和worda(1)包含TXT2,这个计算结果为

'txt1','txt2'等。 ..

您不能使用LIKE来比较逗号分隔的字符串列表。

我不知道,如果你打算来连接的话(0)和字(1)获得

'txt1txt2' LIKE ......

这需要

('" & words(0) & words(1) & "' LIKE N'%' + @Provider + N'%') 

或作出独立比较,这将需要

('" & words(0) & "' LIKE N'%' + @Provider + N'%' OR ' & words(1) & "' LIKE N'%' + @Provider + N'%') 
+0

在我的答案单引号和双引号不正确,我想,我也希望能够证明这个问题。 – KennyZ

相关问题