OleDbcommand:如何在参数中使用'In'-子句?

巴纳贝克

我在我的web应用程序的OLEDB连接链接到的MS Access数据库与一对夫妇的搜索参数(OrderIDLineNumber)作为输入。在过去几年中,此方法运行良好。

现在,我被要求启用多个搜索LineNumbers(例如:2、3、8)。如果我对此进行硬编码,那么它当然可以工作:

and ([Position] in ('2','3','8') or @LINENUM ='')

如何使用给定的输入格式(以逗号分隔的字符串)动态地实现此目的?

我试图LineNumbers用C#在OleDBcommand字符串外部构建一个字符串,然后传递该参数,但是它不起作用。

and ([Position] in @LineNumbers or @LINENUM ='')

我还试图用LineNumbers内部的OleDB命令来构建一个表,例如:

DECLARE @LineNumber TABLE (Value INT)
INSERT INTO @LineNumber VALUES (2)
INSERT INTO @LineNumber VALUES (3)
INSERT INTO @LineNumber VALUES (8)

and ([Position] IN (SELECT Value FROM @LineNumber))

但是然后错误

“无效的SQL语句;预期为'DELETE','INSERT','PROCEDURE','SELECT'或'UPDATE'

被扔了。

我怎样才能做到这一点?


这是我的代码如下所示:

string SelectOleDb = @"SELECT SalesID, CertificationID, CalibrationDate, Path
                       FROM Zeugnis WHERE (SalesID = @SALESID or @SALESID = '') 
                               and ([Position] = @LINENUM or @LINENUM ='')

                       UNION ALL

                       SELECT SalesID, CertificationID, CalibrationDate, Path
                       FROM Zeugnis_2016 WHERE (SalesID = @SALESID or @SALESID = '') 
                               and ([Position] = @LINENUM or @LINENUM ='')

                       UNION ALL

                       SELECT SalesID, CertificationID, CalibrationDate, Path
                       FROM Zeugnis_2015 WHERE (SalesID = @SALESID or @SALESID = '') 
                               and ([Position] = @LINENUM or @LINENUM ='')
                       ORDER BY CalibrationDate, CertificationID";

OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\XXXXXXXX");
OleDbCommand cmd = new OleDbCommand();
OleDbDataAdapter da = new OleDbDataAdapter();
cmd = new OleDbCommand(SelectOleDb, con);
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("SALESID", SALESID.Text);
cmd.Parameters.AddWithValue("LINENUM", LINENUM.Text);
安德鲁斯

我认为您需要更改此行:

and ([Position] in @LineNumbers or @LINENUM ='')

在C#中是这样的:

string LineNumber = "('2','3','8')"; // build this string dynamically

string sqlCondition = " and ([Position] in " + LineNumbers + " or @LINENUM ='')";

然后将sqlCondition字符串连接到您的主SELECT字符串。

如果需要完整的示例,请发布完整的代码段,该代码段通过OleDB运行SQL查询。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章