2013-06-18 117 views
0

我有一個名爲文本框recordID 我已經聲明瞭一個使用以下稱爲ID變量:的SqlDataAdapter添加where子句

int ID = Convert.ToInt32(recordID.Text); 

最後,我有一些代碼,刷新一個GridView後按鈕已被點擊它完美的作品,但是,帶回表中的一切:wherby查詢被更改,以便它增加了一個地方

 using (SqlDataAdapter a = new SqlDataAdapter("SELECT * FROM TEST_TABLE", conn)) 
     { 

      // Use DataAdapter to fill DataTable 
      DataTable t = new DataTable(); 
      a.Fill(t); 

      // Render data onto the screen 
      gridSelectID.DataSource = t; 
     } 

我需要這個被改變,並過濾它上面提到的的ID值(從recordID.Text採取這是一個文本框)

我已經試過這樣:

 using (SqlDataAdapter a = new SqlDataAdapter("SELECT * FROM TEST_TABLE WHERE ID = filter", conn)) 
     { 
      int filter = ID; 
      // Use DataAdapter to fill DataTable 
      DataTable t = new DataTable(); 
      a.Fill(t); 

      // Render data onto the screen 
      gridSelectID.DataSource = t; 
     } 

但它與Invalid Column name 'filter' 我需要這個由在頂部聲明的ID,以過濾查詢抱怨的代碼。

+0

看看數據庫表結構或表設計,看到了列名是什麼存在於你正在試圖查詢表,你有什麼感想' SELECT * FROM'表示 – MethodMan

+0

這些列是ID,類,名稱。我知道過濾器不存在作爲列。我想在上面的代碼中聲明的名爲filter的變量上對其進行過濾。我不明白如何做到這一點。 – JsonStatham

+1

根據[MSDN Library](http://msdn.microsoft.com/zh-cn/library/kx703tc9.aspx),您的語法是正確的。所以,我懷疑這個錯誤是在別的地方。是因爲你的「過濾器」參數周圍沒有任何「***」***? – davideberdin

回答

5

您不能自動將變量綁定到您的命令。你需要做手工,如:

using (SqlDataAdapter a = new SqlDataAdapter("SELECT * FROM TEST_TABLE WHERE ID = @filter", conn)) 
{ 
    int filter = ID; 
    a.SelectCommand.Parameters.AddWithValue("@filter", filter); 
1
using (SqlDataAdapter a = new SqlDataAdapter(string.Format("SELECT * FROM TEST_TABLE WHERE ID = '{0}'",ID), conn))   { 

      // Use DataAdapter to fill DataTable 
      DataTable t = new DataTable(); 
      a.Fill(t); 

      // Render data onto the screen 
      gridSelectID.DataSource = t; 
     } 
+1

只需要提醒一下,您正在嘗試在聲明之前使用過濾器,這就是爲什麼我確信有人低估了您。只需在using子句中將其更改爲ID,它就可以正常工作。 – KreepN

+0

感謝您糾正我。我已更新。欣賞你的努力! – Vinoth

+1

這也是動態構建SQL字符串的不良模式。儘管在這種情況下它是安全的,因爲該值是一個整數,但最好使用常量語句並通過參數分配值。如果該值是一個字符串而不是數字,則這將對SQL注入打開。 –