私は入力としていくつかの検索パラメータ(OrderID
、LineNumber
)を持つMS AccessデータベースにリンクされているWebアプリケーションでOleDB接続を持っています。これは最後の年にうまくいった。OleDbcommand:パラメータ付きのIn節の使い方?
複数のLineNumbers
(たとえば、2,3,8)の検索を有効にするよう依頼されました。 私はこれをハードコードした場合、それは当然のことながら作品:
and ([Position] in ('2','3','8') or @LINENUM ='')
どのように私は、カンマ区切りの文字列として指定された入力フォーマットを使用して動的にこれを達成することができますか?
LineNumbers
の文字列をC#でOleDBコマンド文字列の外に作成してからパラメータを渡そうとしましたが、動作しません。
and ([Position] in @LineNumbers or @LINENUM ='')
私はまた、同様のOleDbCommand内部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文;予想は、 '削除'、 'INSERT'、 'PROCEDURE'、 'SELECT'、または 'UPDATE' "
ぶつかる。
どうすればいいですか?
これは以下のように私のコードが見えるものです:C#でこのような何かに
and ([Position] in @LineNumbers or @LINENUM ='')
:私はあなたがこの行を変更する必要があると思う
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);
[位置]は選択文字列内の列なので、sqlCondition文字列では静的に使用できません。あるいは、クエリを動的に構築して実行するようなものを提案していますか?私はこれがOdeDbではうまくいかないと思います。 – Barnabeck
@Barnabeckはい、この 'string SelectOleDb'文字列を動的に構築し、このパラメータを使用しないことを提案します' cmd.Parameters.AddWithValue( "LINENUM"、LINENUM.Text); 'IN句に可能な値のリストを渡す。 – andrews
今すぐ手に入れました!ありがとうございました。あなたのヒントがDynamicSQLを指していると思っていたので、私は混乱しました。 – Barnabeck