2015-04-20 1 views
0

Im пытаюсь сделать поиск, где вы можете ввести либо ID или Name, но когда я пытаюсь ввести имя его отображение ошибкиОшибка поиска VB sql "Ошибка преобразования типа данных varchar в bigint."

«Ошибка преобразования типа данных VARCHAR в BigInt.»

Вот мой код:

If button1 = 2 Then 
     Dim SA As New SqlDataAdapter("Select [Dept_Id],[Dept_Name],[Active] From [it].[dbo].[Department] WHERE Dept_Id = '" & frmMain.txtSearch.Text & "' OR Dept_Name='" & frmMain.txtSearch.Text & "'", Connection1) 
     Dim DT As New DataTable 
     SA.Fill(DT) 
     With D 
      .DataSource = DT 
      .Columns(0).HeaderText = "Department ID" 
      .Columns(1).HeaderText = "Department Name" 
      .Columns(2).HeaderText = "Active" 
     End With 

Существует ошибка в строке SA.Fill(DT)

+0

'Dept_Id', вероятно,' bigint', но вы рассматриваете его как строку ('nvarchar'). Кроме того, ваш код * чрезвычайно * уязвим для [SQL injection] (http://en.wikipedia.org/wiki/SQL_injection) атак. Ради ваших пользователей, пожалуйста, узнайте, как использовать подготовленные операторы/параметризованные запросы. –

+0

Вы никогда не должны использовать пользовательский ввод для создания инструкции sql. Я не могу объяснить все это в одном комментарии, но Google SQL для более подробной информации. –

+0

Извините im new vb. Что мне делать? –

ответ

3

Вы должны использовать параметры для запроса. И, я могу спросить, почему вы хотите, чтобы пользовательский ввод был либо именем, либо числом. Но, учитывая то, что вы делаете, вы можете устранить проблему путем преобразования Dept_Id перед сравнением:

Select [Dept_Id], [Dept_Name], [Active] 
From [it].[dbo].[Department] 
WHERE CAST(Dept_Id as VARCHAR(255)) = '" & frmMain.txtSearch.Text & "' OR 
     Dept_Name='" & frmMain.txtSearch.Text & "'" 

Это также один из способов подойти к решению даже с параметризованным запросом.

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