2013-06-18 4 views
0

У меня есть текстовое поле с именем recordID Я объявленный переменной ID с помощью следующего:SqlDataAdapter добавления где положение

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

Наконец, у меня есть некоторый код, который обновляет GridView после кнопка было щелкнул, который прекрасно работает, но, возвращает все в таблице:

 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; 
     } 

мне это нужно, чтобы быть изменен wherby запрос изменяется таким образом, что он добавляет, где и фильтрует его от значения идентификатора упомянутого выше (Взято из 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' мне это нужно, чтобы отфильтровать запрос по идентификатору, который объявлен в верхнем кода.

+0

Посмотрите на схеме таблицы базы данных или таблица Design и посмотреть, что имена столбцов, которые существуют в таблице, которую вы пытаетесь запросить, что вы думаете, ' SELECT * FROM' означает – MethodMan

+0

Столбцы: ID, Class, Name. Я знаю, что фильтр не существует как столбец. Я хочу отфильтровать его на переменном с именем filter, который был указан в приведенном выше коде. Я не понимаю, как это сделать. – JsonStatham

+1

Согласно [Библиотека MSDN] (http://msdn.microsoft.com/en-us/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

Просто хедз-ап, вы пытаетесь использовать фильтр до его объявления, поэтому я уверен, что кто-то остановил вас. Просто измените его на ID в разделе использования, и он будет работать нормально. – KreepN

+0

Спасибо, что исправил меня. Я обновил. Цените свои усилия !!! – Vinoth

+1

Это также плохой шаблон для динамического построения строки SQL. Несмотря на то, что в этом контексте это безопасно, поскольку значение является целым числом, всегда лучше использовать оператор константы и присваивать значения через параметры. Если значение было строкой вместо числа, это было бы открыто для SQL-инъекции. –

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