Ich habe eine OleDB-Verbindung in meiner Webanwendung, die mit der MS Access-Datenbank mit ein paar Suchparametern (OrderID
, LineNumber
) als Eingabe verknüpft ist. Das hat in den letzten Jahren gut funktioniert.OleDbcommand: Wie benutzt man 'In' - Klausel mit Parametern?
Jetzt wurde ich aufgefordert, die Suche nach mehreren LineNumbers
(z. B. 2,3,8) zu ermöglichen. Wenn ich die hard funktioniert es natürlich:
and ([Position] in ('2','3','8') or @LINENUM ='')
Wie kann ich diese dynamisch mit dem angegebenen Eingabeformat als kommagetrennte Zeichenfolge erreichen?
Ich habe versucht, eine Zeichenfolge mit der LineNumbers
außerhalb der OleDBcommand Zeichenfolge mit C# und dann übergeben Sie den Parameter, aber es wird nicht funktionieren.
and ([Position] in @LineNumbers or @LINENUM ='')
ich mit dem LineNumbers
innerhalb der OleDbCommand einen Tisch zu bauen, wurde auch versucht, wie:
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))
aber dann der Fehler
„Ungültige SQL-Anweisung, erwartet 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT' oder 'UPDATE' "
wurde t hoch
Wie kann ich das tun?
Dies ist, was mein Code wie folgt aussieht:
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);
[Position] ist eine Spalte in der Select-Zeichenfolge und kann daher nicht statisch in der sqlCondition-Zeichenfolge verwendet werden. Oder schlagen Sie vor, die Abfrage dynamisch zu erstellen und dann auszuführen? Ich denke, das wird mit OdeDb nicht funktionieren. – Barnabeck
@Barnabeck Ja, ich schlage vor, dass Sie diese 'string SelectOleDb' Zeichenfolge dynamisch erstellen und NICHT diesen Parameter' cmd.Parameters.AddWithValue ("LINENUM", LINENUM.Text) verwenden; 'um eine Liste von möglichen Werten für die' IN' Klausel zu übergeben . – andrews
Jetzt habe ich es! Vielen Dank. Ich war verwirrt, weil ich dachte, dass dein Hinweis auf DynamicSQL zeigt. – Barnabeck