0

私は最近、アプリケーションを .net 1.1 から 3.5 にアップグレードする任務を負っており、2 つのバージョン間で動作が異なる DataView の RowFilter に遭遇しました。

これは、1.1 では動作するが 3.5 では動作しない 1.1 のコード ブロックです。これを 3.5 で実行しようとすると、次のエラーが表示されます。「System.String および System.Int32 で '=' 操作を実行できません」周りに目盛りを付けなくても文字列として扱いますが、3.5 では rptNum が表示され、周りに目盛りを付ける必要があります。dv のフィールドは文字列の DataType です。

    private DataView BuildDataView(string rptNum) {
        DataView dv = null;

        if(dt != null) {
            dv=new DataView(dt);
            dv.RowFilter="reporting_number = " + rptNum;
        }

        return dv;
    }

これが動作するように変更された 3.5 のコード ブロックです。文字列として扱われるように、文字列パラメーターの周りに目盛りを追加する必要がありました。

    private DataView BuildDataView(string rptNum) {
        DataView dv = null;

        if(dt != null) {
            dv=new DataView(dt);
            dv.RowFilter="reporting_number = '" + rptNum + "'";
        }

        return dv;
    }
4

1 に答える 1

0

エラーメッセージを考えると:

"Cannot perform '=' operation on System.String and System.Int32

エラーの原因となっている rptNum の値が数値であるかのように聞こえます (文字列型の列ですが): 単なる推測ですが、おそらくバージョン 1.1 はフィルター内の変数の値を最初に見て、処理するのに十分寛容です。 filter 句はユーザーが指定したものとして解釈できますが、3.5 では型キャストが優先されます。コードのバージョン 1.1 で実行したときに、rptNum が数値でない場合、エラー メッセージが表示されますか?

于 2009-11-16T19:43:58.927 に答える