Параметризованная ошибка построения запроса

Почему мои параметризованные переменные не добавляются в мой запрос Sql?

У меня есть две параметризованные переменные, установленные combobox.text который выбирается конечным пользователем.

Я получаю ошибку ниже, когда пытаюсь использовать запрос, который использует параметризованную переменную.

Дополнительная информация: необходимо объявить скалярную переменную "@username"

Я что-то пропустил?

Пример запроса

  SQL = "SELECT stationID, LocationName, plandate, username, status  FROM dbo.joblist WHERE username = @username and status = @status";

Фрагмент кода

            //Decide what query
            String SQL = SQLSelection();
            //Connection String
            String ConnString = "Data Source=dbsqlexpress; Provider=SQLOLEDB; Initial Catalog=Data; User ID=mobile; Password=PW";
            //Create  and initalize Oledbconnection object and pass connection string into it.
            OleDbConnection con = new OleDbConnection(ConnString);

            //open connection to database
            con.Open();

           //create adapter that sits inbetween dataset and datbase
            OleDbDataAdapter adapter = new OleDbDataAdapter();

            adapter.SelectCommand = new OleDbCommand(SQL,con);
            adapter.SelectCommand.Parameters.Add("@username", OleDbType.VarChar).Value = auditorCmb.Text;
            adapter.SelectCommand.Parameters.Add("@status", OleDbType.VarChar).Value = statusCmb.Text;


            //Create dataset
            DataSet dataset = new DataSet();

            using (DataTable dt = new DataTable())
            {
                adapter.Fill(dt);
                dataGridView1.AutoResizeColumns();
                dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

                con.Close();
                dataGridView1.DataSource = dt;

            int rowCount = rowCount = dt.Rows.Count;
            label10.Text = rowCount.ToString("n0");
            }




        }

2 ответа

Решение

С OLE DB (и ODBC) вам нужно указать ? в качестве маркеров параметров в операторе SQL. Затем они отображаются по порядковому номеру в соответствии с параметрами заказа, которые были сопоставлены с коллекцией.

SQL = "SELECT stationID, LocationName, plandate, username, status FROM dbo.joblist WHERE username = ? and status = ?;";

Избегайте использования OLE DB и ODBC в приложениях.NET. .Net Provider for SQL Server (aka SqlClient) обеспечит лучшую производительность.Net Applications. Кроме того, Microsoft объявила об отказе от OLE DB для доступа к реляционной базе данных в SQL Server.

Поставщик OLE DB .NET не поддерживает именованные параметры для передачи параметров в оператор SQL или хранимую процедуру, вызываемую OleDbCommand, если для CommandType задано значение Text. В этом случае необходимо использовать заполнитель вопросительного знака (?). Например:

ВЫБРАТЬ * ИЗ ПОКУПАТЕЛЕЙ, ГДЕ CustomerID =?

MSDN: свойство OleDbCommand.Parameters

Другие вопросы по тегам