2014-03-17 4 views
0

Я использую этот код для поиска отдельных элементов внутри списка флажков, и он не работает.Невозможно выполнить поиск по выбранным элементам

protected void btnSearchCode_Click(object sender, ImageClickEventArgs e) 
{ 
    string selectedValues = string.Empty; 
    foreach (ListItem item in cblCode.Items) 
    { 
     if (item.Selected) 
      selectedValues += item.Value + ","; 
    } 
    if (selectedValues != string.Empty) 
     selectedValues = selectedValues.Remove(selectedValues.Length - 1); 
    cblCode.DataSource = DataReport.SearchCode(selectedValues); 
    cblCode.DataBind(); 
} 

public static DataTable SearchCode(string selectedValues) 
    { 
     string strcon = ConfigurationManager.ConnectionStrings["LocalDB"].ConnectionString; 
     DataTable datatable = new DataTable(); 
     using (SqlConnection conn = new SqlConnection(strcon)) 
     { 
      conn.Open(); 
      SqlCommand command = new SqlCommand(); 
      string strQuery = "Select Group, Name from Details where Code in (" + selectedValues + ")", conn; 
      command.Connection = conn; 
      SqlDataAdapter dataadapter = new SqlDataAdapter(); 
      dataadapter.SelectCommand = command; 
      DataSet ds = new DataSet(); 
      dataadapter.Fill(datatable); 
     } 
     return datatable; 
    } 

Настоятельно оцените любую помощь по этому вопросу.

+0

Что значит не работает? Получаете ли вы ошибку или просто нет результатов? –

+0

Я получаю этот erroe, когда я нахожу поиск. Сведения об исключении: System.InvalidOperationException: Fill: свойство SelectCommand.Connection не было инициализировано. –

+0

Какова ценность переменной 'strcon'? –

ответ

0

Вы создаете строку запроса, но вы никогда не присвоить его переменной command. Поэтому, когда вы назначаете его selectCommand, запрос от БД не требуется. Вы хотите добавить эту строку кода, чтобы присвоить строку запроса переменной: command = new SqlCommand(strQuery,conn);

0

Всегда использовать SqlParamerter во время передачи параметров в базе данных

я думаю, что Вы не хватает одного перевернутую запятую, потому что Ваш SeletedValues ​​является string

string strQuery = "Select Group, Name from Details 
where Code in ('" + selectedValues + "')", conn; 
+0

Это не сработает. Если это список строк, вам нужны одинарные кавычки вокруг каждой строки. –

+0

Я думаю, будет лучше, если он использует строку типа «1,3,5,7», чем «a, g, b, h» –

+0

Не уверен, что я вас понимаю, но здесь. Если его контрольный список имеет значения 1,2,3,4, то 'selectedValues' =" 1,2,3,4 ", и он может передать его как' where Code in ('"+ selectedValues ​​+"') ". Но если контрольный список имеет значения «abc», «def», «pqr», «xyz», тогда ему нужно построить 'selectedValues' как« abc »,« def »,« pqr »,« xyz ». В любом случае, одиночные кавычки не обязательно должны быть там. –

1

Вы не использовали strQuery вообще.

Попробуйте это:

public static DataTable SearchCode(string selectedValues) 
     { 
     string strcon = ConfigurationManager.ConnectionStrings["LocalDB"].ConnectionString; 
     DataTable datatable = new DataTable(); 
     using (SqlConnection conn = new SqlConnection(strcon)) 
     { 
      conn.Open(); 

      string strQuery = "Select Group, Name from Details where Code in (" + selectedValues + ")"; 
      SqlCommand command = new SqlCommand(strQuery, conn); 
      SqlDataAdapter dataadapter = new SqlDataAdapter(); 
      dataadapter.SelectCommand = command; 
      DataSet ds = new DataSet(); 
      dataadapter.Fill(datatable); 
     } 
     return datatable; 
    } 
Смежные вопросы