Разница между ADO.NET 1.0 и 3.5 с использованием RowFilter и строк?

Недавно мне было поручено обновить приложение с .net 1.1 до 3.5, и я наткнулся на RowFilter в DataView, поведение которого отличалось между двумя версиями.

Вот мой блок кода в 1.1, который работает в 1.1, но не в 3.5. Я получаю следующую ошибку, пытаясь запустить это в 3.5: «Невозможно выполнить операцию '=' для System.String и System.Int32». И 1.1, и 3.5 попадают в одну и ту же базу данных, я просто не понимаю, как 1.1 видит строковый параметр и обрабатывает его как строку, не ставя вокруг него галочки, но в 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;
    }

person TampaRich    schedule 16.11.2009    source источник


Ответы (1)


Учитывая сообщение об ошибке:

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

звучит так, как будто значение rptNum, вызывающее ошибку, является числовым (хотя столбец типа String): просто предположение, но, возможно, версия 1.1 сначала смотрит на значение переменной в фильтре и достаточно прощает, чтобы обработать его, если предложение фильтра может интерпретироваться как заданное пользователем, тогда как в 3.5 приоритет имеет приведение типа. Вы получаете сообщение об ошибке, если rptNum не является числовым при запуске в версии 1.1 вашего кода?

person davek    schedule 16.11.2009
comment
Хорошо, это предполагает, что проверка типов не выполняется заранее в 1.1, что, похоже, имеет место в 3.5. - person davek; 16.11.2009