0

我最近的任务是将应用程序从 .net 1.1 升级到 3.5,并在 DataView 上遇到了一个 RowFilter,它在两个版本之间具有不同的行为。

这是我在 1.1 中的代码块,它适用于 1.1 但不适用于 3.5。我尝试在 3.5 中运行它时遇到以下错误“无法在 System.String 和 System.Int32 上执行 '=' 操作” 1.1 和 3.5 都在访问同一个数据库,我只是对 1.1 如何看到字符串参数感到困惑并将其视为字符串,无需在其周围放置 tic 标记,但在 3.5 中,它会看到 rptNum 并要求您在其周围放置 tic。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 中更改的代码块,以便它可以工作。我必须在字符串参数周围添加 tic 标记,以便将其视为字符串。

    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 的值是数字的(尽管是 String 类型的列):只是一个猜测,但也许 1.1 版首先查看过滤器中变量的值,并且如果filter 子句可以解释为用户给出的,而在 3.5 中类型转换优先。如果 rptNum 在您的代码版本 1.1 中运行时不是数字,您会收到错误消息吗?

于 2009-11-16T19:43:58.927 回答