嵌套SELECT抛出异常“没有给出一个或多个必需参数的值”

时间:2014-05-14 13:33:40

标签: sql oledb oledbconnection oledbcommand oledbexception

尝试在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);

1 个答案:

答案 0 :(得分:3)

你有几个问题。一,您没有在子查询中选择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