【发布时间】:2017-02-16 13:28:51
【问题描述】:
我的 Web 应用程序中有一个 OleDB 连接,该连接使用几个搜索参数(OrderID、LineNumber)作为输入链接到 MS Access 数据库。这在过去几年运行良好。
现在我被要求启用对多个 LineNumbers 的搜索(例如:2,3,8)。
如果我对此进行硬编码,它当然可以:
and ([Position] in ('2','3','8') or @LINENUM ='')
如何使用给定的输入格式作为逗号分隔的字符串动态地实现这一点?
我试图用 C# 在 OleDBcommand 字符串之外用LineNumbers 构建一个字符串,然后传递参数,但它不起作用。
and ([Position] in @LineNumbers or @LINENUM ='')
我还尝试在 OleDB 命令中使用LineNumbers 构建一个表,例如:
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);
【问题讨论】:
标签: c# ms-access oledb oledbcommand