2015-11-27 2 views
0

Я пытаюсь настроить auto complete на 2 столбца DataGridView, заполненных из базы данных sql Server 2008 r2. Я протестировал предыдущую версию этого кода до тех пор, пока в базу данных не будет передано значение NULL. запрос работал отлично, какпроверенный sql-запрос не работает в vb.net

"SELECT DISTINCT" & Колонка & "ОТ dbo.Purchases"

я проверил мой новый запрос в "SQL Server Management Studio" и получил результаты, я ожидал, то же, что и раньше минус Null, но когда я помещаю новый запрос в код, я получаю исключение.

System.Data.SqlClient.SqlException (0x80131904): Неверный синтаксис рядом с ключевым словом «NULL».

Private Function fillACList(Column As String) As AutoCompleteStringCollection 
    Dim temp As AutoCompleteStringCollection 
    temp = New AutoCompleteStringCollection 
    Using acConn As SqlConnection = New SqlConnection("Data Source=xxx.xxx.xxx.xxx,xxxx;Trusted_Connection=Yes;database=Purchasing_DB") 
     Try 
      acConn.Open() 
     Catch ex As Exception 
      MessageBox.Show(ex.ToString() & " FillACList") 
     End Try 
     Using cbCommand As SqlCommand = New SqlCommand("SELECT DISTINCT " & Column & " FROM dbo.Purchases WHERE " & Column & " IS NOT NULL", acConn) 
      Dim reader As SqlDataReader = cbCommand.ExecuteReader() 
      While reader.Read() 
       If reader.HasRows Then 
        Try 
         Dim input As String 
         input = reader.GetString(0) 
         temp.Add(input) 
        Catch ex As Exception 
         MessageBox.Show(ex.ToString() & " CheckDB") 
        End Try 
       End If 
      End While 
      If (acConn.State = ConnectionState.Open) Then 
       acConn.Close() 
      End If 
     End Using 
    End Using 
    Return temp 
End Function 

Строка подключения отредактированное в целях безопасности.

+0

У какой строки возникает эта ошибка? может быть, ваша колонка сама передается как null –

+0

С другой стороны, этот код недействителен. Вы должны управлять этим либо хранимой процедурой, либо параметризованной операцией sql. Встроенная инструкция sql не препятствует внедрению sql. – Gajendra

ответ

0

Вы проверили, что столбец прошлых параметров не является ничем? Поскольку вы используете «&», vb.net может не показывать ошибку. Вместо этого используйте «+», потому что «&» делает много конверсий.

+0

спасибо, мне нужно помнить различия между + и & и последствиями одного над другим. –

0

Вы должны проверить, что является фактическим запросом в SqlCommand и найти там проблему.

Смежные вопросы