В чем разница между odbcparameter и oledbparameter при добавлении значений типа char? - PullRequest
0 голосов
/ 07 ноября 2018

Я мигрирую из Oracle в Tibero базу данных, используя C #.

Проблема заключается в том, что при добавлении параметра типа "CHAR" с помощью OleDbParameter данные не могут быть получены, если они не заполнены следующими пробелами в соответствии с размером столбца БД.

(Используя OracleParameter или OdbcParameter, можно выполнить обычный запрос без заполнения пустого пространства в качестве фактического размера столбца)?

String sSQL = @"SELECT *
                          FROM V_PROD_MA
                         WHERE CAR_TYPE = :CAR_TYPE
                           AND BODY_NO  = :BODY_NO";

        OleDbDataAdapter adapter = null;
        //OracleDataAdapter adapter = null;
        DataTable         table   = new DataTable();

        try
        {
            Open();

            adapter = new OleDbDataAdapter(sSQL, Connetion);

            adapter.SelectCommand.Parameters.Add("CAR_TYPE", OleDbType.Char, 4).Value = sCarType;
            adapter.SelectCommand.Parameters.Add("BODY_NO", OleDbType.Char, 6).Value = sBodyNo;

            adapter.Fill(table);
        }

Выше приведен тестовый исходный код, и когда я устанавливаю sCarType = 'D0F', данные извлекаются, но когда я устанавливаю sCarType = 'D0F', данные не извлекаются.

Фактический размер столбца char(4).

Вы можете предложить изменить оператор SQL WHERE, например trim(car_type), но нам нужно изменить около 2000 операторов SQL, поэтому мы хотим избежать такого решения.

А также мы используем каркас для переноса каждой команды SQL, параметры и каркас не имеют информации о размере столбца для заполнения пробелами.

Есть ли другой способ избежать такого рода проблем?

...