Не работает параметризированный запрос к БД SQL-Server. Для текущего узла TreeView я вывожу данные из связанной таблицы
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
string cur = treeView1.SelectedNode.Text;
string connectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\TestBase.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
string commandText = "SELECT Employees.Name, Employees.Experience FROM Departments INNER JOIN Employees ON Departments.id=Employees.Department WHERE Departments.Name=" + cur + ";";
SqlConnection conn = new SqlConnection();
conn.ConnectionString = connectionString;
conn.Open();
SqlDataAdapter dataAdapter = new SqlDataAdapter(commandText, conn);
DataSet ds = new DataSet();
dataAdapter.Fill(ds);
dataGridView1.DataSource = ds.Tables[0].DefaultView;
}
Если в запросе убираю WHERE, то все работает, но выводятся все записи, а мне надо лишь определенные. На строке dataAdapter.Fill(ds) вылетает исключение SQLException: Invalid column name 'Бухгалтерия'.
Правильно делать через параметры и через SqlCommand:
string commandText = "SELECT Employees.Name, Employees.Experience FROM Departments INNER JOIN Employees ON Departments.id=Employees.Department WHERE Departments.Name=@Name;";
SqlCommand cmd = new SqlCommand(commandText, conn);
SqlParameter Param1 = new SqlParameter("@Name", SqlDbType.VarChar);
Param1.Value = cur;
cmd.Parameters.Add(Param1);
SqlDataAdapter dataAdapter = new SqlDataAdapter(cmd);
Если Departments.Name - строковый, то надо поставить "'". Т.е. ...Departments.Name='" + cur + "';". Но все-же лучше, как советовал Yura Ivanov. К примеру, дату проще задавать через параметры.
Продвижение своими сайтами как стратегия роста и независимости