2012-10-25 49 views
0

我試圖設置一個簡單的c#表單來搜索我們的一個SQL數據庫。當我嘗試調試時,我總是收到'SQLException was Unhandled'錯誤。我知道SQL語句有效,我可以在我的服務器上運行它。我認爲這是我嘗試從文本框輸入數據的方式的一個問題。有人能給我一些指導嗎?C#表格中的SQL搜索

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Data.SqlClient; 

namespace USER_Lookup 
{ 
    public partial class Search : Form 
    { 
     DataSet ds = new DataSet(); 
     SqlConnection cs = new SqlConnection("Data Source=PC01; Initial Catalog=DB01; Integrated Security=TRUE"); 
     SqlDataAdapter da = new SqlDataAdapter(); 

     public Search() 
     { 
      InitializeComponent(); 
        } 

     private void button_Search_Click(object sender, EventArgs e) 
     { 
      string badgeCode = textBox_badgeCode.Text.Trim(); 
      da.SelectCommand = new SqlCommand 
       ("SELECT db01.dbo.staff.lastname AS 'Last Name', db01.dbo.staff.firstname AS 'First Name', db01.dbo.staff.badgecode AS 'User ID', db01.dbo.staffrole.name AS 'Role' FROM db01.dbo.staff, db01.dbo.staffrole, db01.dbo.staff_staffrole WHERE db01.dbo.staff.badgecode =" + badgeCode + "AND db01.dbo.staff.id = db01.dbo.staff_staffrole.staff_id AND db01.dbo.staff_staffrole.staffrole_id = db01.dbo.staffrole.id", cs); 
      ds.Clear(); 
      da.Fill(ds); 

      dg.DataSource = ds.Tables[0]; 
     } 
    } 
} 
+1

您需要淨化你的輸入,瞭解SQL注入! –

回答

1

這裏沒有空間

... db01.dbo.staff.badgecode =" + badgeCode + "AND db01.dbo.staff.id .... 
               ^^^^ 

而且,這裏使用maclive.dbo.staff.lastname但沒有FROM或加入該數據庫
(錯字?)

而且,如果db01.dbo.staff.badgecode是varchar字段,那麼你需要您的badgeCode變量的單引號。然而,字符串連接,形成一個SQL命令是Sql Injection attacks.
的肯定路徑 更改代碼中使用參數

da.SelectCommand = new SqlCommand 
    ("SELECT maclive.dbo.staff.lastname AS 'Last Name', " + 
    "db01.dbo.staff.firstname AS 'First Name', db01.dbo.staff.badgecode AS 'User ID', "+ 
    "db01.dbo.staffrole.name AS 'Role' " + 
    "FROM db01.dbo.staff, db01.dbo.staffrole, db01.dbo.staff_staffrole " + 
    "WHERE db01.dbo.staff.badgecode [email protected] AND db01.dbo.staff.id = " + 
    "db01.dbo.staff_staffrole.staff_id AND db01.dbo.staff_staffrole.staffrole_id = " + 
    "db01.dbo.staffrole.id", cs); 

da.SelectCommand.Parameters.AddWithValue("@badge", badgecode); 
+0

這就像一個魅力,非常感謝你的幫助。我聽說過SQL注入攻擊,但我對SQL很瞭解,所以我對它們瞭解不多,所以現在是時候多做一些閱讀了!太棒了。非常感謝! –

2

我相信你需要在badgeCode的單引號。此外,您在下一個之前缺少一個空格。試試這個:

...staff.badgecode = '" + badgeCode + "' AND... 

請注意,您的代碼包含SQL注入攻擊漏洞。您應該使用參數來提供badgeCode。