3

クエリをパラメータ化されたものに変換しようとしていますが、構文の理解に問題があります。VS2012によると、これはエラーがありませんが、パラメーターの値がクエリに代入されていないため、実行時にエラーが発生します。

サンプルコードは次のとおりです。

IfxCommand query = new IfxCommand("SELECT slm_slmno FROM slmmas WHERE 
    slm_logon = @Logon");
query.Parameters.Add("@Logon", logon);

実行時にクエリが返すエラーは次のとおりです。

Error Message = ERROR [42000] [Informix .NET provider][Informix]A syntax 
    error has occurred.
Sql Query = SELECT slm_slmno FROM slmmas WHERE slm_logon = @Logon

エラーから、logonの値がコマンドに置き換えられていないことは明らかです。Informix10.0を使用しています。ドキュメント(http://publib.boulder.ibm.com/infocenter/idshelp/v111/index.jsp?topic=/com.ibm.net_cc.doc/dqx1db2commandclass.htmにあります)を見ましたが、私が達成しようとしている単純な使用法を示す明確な例はありません。これにもっとうまく取り組む必要がある方法について何か提案はありますか?

4

3 に答える 3

6

http://publib.boulder.ibm.com/infocenter/idshelp/v117/index.jsp?topic=%2Fcom.ibm.netpr.doc%2Fids_net_115.htmにある例のように、クエリを次のように書き直すことができます。

IfxCommand query = new IfxCommand("SELECT slm_slmno FROM slmmas WHERE 
    slm_logon = ?");
IfxParameter ifxp1 = new IfxParameter("Logon",DbType.String);
query.Parameters.Add(ifxp1);
ifxp1.Value = "your value";
于 2013-03-09T06:07:03.600 に答える
2

Vijayのソリューションは機能しましたが、複数のパラメーターを処理する場合、それはかなり冗長になるアプローチでした。私はそのようなアプローチを変更することができました。これははるかに最小限であり、複数のパラメーターを追加するのが簡単になります。

IfxCommand query = new IfxCommand("SELECT slm_slmno FROM slmmas WHERE 
    slm_logon = ?");
query.Parameters.Add(new IfxParameter("Logon", logon));

うまくいけば、他の誰かがこれが役に立つと思うでしょう。

于 2013-03-11T14:47:03.953 に答える
-1

SQLクエリを実行する場合、別のアプローチは、C#文字列自体でパラメーター置換を実行し、最終的なSQLをコマンドに渡すことです。

例は-

var sql = string.Format("SELECT slm_slmno FROM slmmas WHERE slm_logon = {0}", logon);
IfxCommand query = new IfxCommand(sql);

ストアドプロシージャは別のケースであり、informixアダプタのドキュメントを確認する必要があります。

于 2013-03-09T01:53:03.343 に答える