Вложенный SELECT выдает исключение. Не задано значение для одного или нескольких обязательных параметров.

Попытка выполнить следующий запрос в базе данных доступа Northwind вызывает исключение:

No value given for one or more required parameters

Мой упрощенный запрос

SELECT * FROM (SELECT [Orders].[OrderDate] FROM [Orders]) t 
WHERE [Orders].[CustomerID]=?

Исключение возникает только, если используется вложенный SELECT.

Вопрос: есть ли способ использовать вложенный SELECT и параметры?

Мой код:

OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + _databasePath);
conn.Open();

OleDbCommand com = new OleDbCommand(@"SELECT * 
           FROM (SELECT [Orders].[OrderDate] FROM [Orders]) t 
           WHERE [Orders].[CustomerID]=?", conn);

com.Parameters.Add("Bla", OleDbType.WChar);
com.ExecuteReader(CommandBehavior.CloseConnection);

person VladL    schedule 14.05.2014    source источник
comment
Я думаю, вам нужно также выбрать CustomerID во вложенном запросе, а затем изменить предложение where на WHERE t.CustomerID = ?   -  person SomethingSomething    schedule 14.05.2014
comment
вы правы, но здесь я просто упростил запрос. Взятие части where внутри вложенного выбора сделало работу. Но все равно спасибо!   -  person VladL    schedule 14.05.2014


Ответы (1)


У вас есть пара проблем. Во-первых, вы не выбрали поле CustomerID в своем подзапросе, поэтому вы не можете отфильтровать его из внешнего запроса. Во-вторых, вы ссылаетесь на неправильный псевдоним таблицы во внешнем запросе. Попробуйте это вместо этого:

SELECT * 
FROM (SELECT [Orders].[OrderDate], [Orders].[CustomerID] FROM [Orders]) t 
WHERE t.[CustomerID]=?

В качестве альтернативы вы не можете выбрать CustomerID и поместить свой параметр в свой подзапрос:

SELECT * 
FROM (SELECT [Orders].[OrderDate] FROM [Orders] WHERE [Orders].[CustomerID]=?) t 
person sgeddes    schedule 14.05.2014
comment
Спасибо, я только что упростил это, но я попробую ваш запрос на редактирование/альтернативный - person VladL; 14.05.2014
comment
Спасибо, первый подход не работает, похоже на ограничение OleDB, но второй помог. - person VladL; 14.05.2014
comment
@VladL -- не беспокойтесь, рад, что смог помочь! - person sgeddes; 14.05.2014