Разница между ADO.NET 1.0 и 3.5 с использованием RowFilter и строк? - PullRequest
0 голосов
/ 16 ноября 2009

Недавно мне было поручено обновить приложение с .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;
    }

1 Ответ

0 голосов
/ 16 ноября 2009

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

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

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

...