2015-04-20 58 views
0

我試着做一個搜索,你可以輸入任何IDName但是當我試着輸入一個名字就顯示錯誤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注入](http://en.wikipedia.org/wiki/SQL_injection)攻擊。爲了您的用戶,請了解如何使用預準備語句/參數化查詢。 –

+0

你應該永遠不要使用用戶輸入來生成一條sql語句。我無法在一個註釋中解釋整個事情,但Google sql注入瞭解更多細節。 –

+0

對不起,新的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 & "'" 

這也是接近的解決方案,甚至用參數化查詢的一種方法。

相關問題