2014-09-13 4 views
0

Я пытаюсь сделать поиск базы данных в моем приложении, где пользователь будет выбирать столбец и вводить слово поиска, и результат будет появляться в dataviewgrid. Это код, над которым я работал, проблема в том, что ничего не возникает, и я уверен, что есть записи в базе данных. EDIT: это окна формы приложенияsql поисковый запрос в C#

private void button1_Click(object sender, EventArgs e) 
    { 
     conn = new SqlConnection("Server = localhost; database = Clients; Integrated Security = SSPI"); 
     conn.Open(); 
     SqlCommand cmd = new SqlCommand("SELECT * From dbo.Tclients WHERE @choice = @input", conn); 
     cmd.Parameters.AddWithValue("@choice", comboBox1.Text); 
     cmd.Parameters.AddWithValue("@input", textBox1.Text); 
     ds = new DataSet(); 
     da = new SqlDataAdapter(cmd); 
     da.Fill(ds); 
     dataGridView1.DataSource = ds.Tables[0]; 
     conn.Close(); 
    } 
+0

Содержит ли 'Tclients' стол' выбор 'column? Какую колонку вы собираетесь фильтровать? –

+1

Вы не можете использовать параметр для выражения имени столбца или имени таблицы. – Steve

+0

Я не знал, что ты не можешь этого сделать, хорошо. –

ответ

3

данных Вы не можете использовать параметр, чтобы выразить имя столбца. Вы должны заполнить свой выпадающий с именами столбцов и установить его свойство DropDownStyle в DropDownList (не позволить пользователю ввести имя столбца), а затем построить ваш запрос

private void button1_Click(object sender, EventArgs e) 
{ 
    string cmdText = "SELECT * From dbo.Tclients WHERE " + comboBox1.Text + " = @input"; 
    using(SqlConnection conn = new SqlConnection(....)) 
    using(SqlCommand cmd = new SqlCommand(cmdText, conn)) 
    { 
     conn.Open(); 
     cmd.Parameters.AddWithValue("@input", textBox1.Text); 
     ds = new DataSet(); 
     da = new SqlDataAdapter(cmd); 
     da.Fill(ds); 
     dataGridView1.DataSource = ds.Tables[0]; 
    } 
} 
+0

Я думаю, что это открыто для Sql Injection! Просто напишите название столбца! – mybirthname

+0

Я указал, что имена столбцов должны быть добавлены в поле со списком, а DropDownStyle должно быть установлено в DropDownList. Невозможно редактировать с этим стилем – Steve

+0

это работало так, как я хотел, чтобы это было, большое вам спасибо за вашу помощь –

0

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

dataGridView1.DataSource = ds.Tables[0]; 
dataGridView1.DataBind(); 
+1

DataGridView (или лучше приложение WinForm) не нуждается в вызове DataBind – Steve

+0

, он дает мне ошибку после добавления dataGridView1.DataBind(); –

+0

Можете ли вы подтвердить его приложение ASP.NET? Что такое сообщение об ошибке? – chrana

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