OracleDataAdapter.Fill преобразование даты и времени в строке - PullRequest
1 голос
/ 08 ноября 2019

У меня есть хранимая процедура, которая при выполнении в sql developer возвращает строку, содержащую поле со строкой, подобной:

'Wow look at this time: 20191113 13:24:44 \r\n now that is one cool datetime'

Однако после того, как OracleDataAdapter завершил свою операцию Fill, строка выглядит следующим образом::

'Wow look at this time: 13-NOV-19 \r\n now that is one cool datetime'

Есть ли какой-нибудь способ помешать OracleDataAdapter связываться с моими строками?

1 Ответ

0 голосов
/ 12 ноября 2019

Это не проблема OracleDataAdapter, это проблема вашей хранимой процедуры. Скорее всего, ваша хранимая процедура выглядит следующим образом:

create or replace function my_cool_proc
    return varchar2
is
begin
    return 'Wow look at this time: '||sysdate||chr(13)||chr(10)||'now that is one cool datetime';
end;

В этом случае sysdate (тип данных date) преобразуется в varchar2 благодаря правилам неявного преобразования Oracle при объединении (||)оператор) строки. Когда вы запускаете хранимую процедуру из SQL Developer, параметры NLS сеанса вашего SQL Developer применяются для преобразования значений date в значения varchar2. Когда вы запускаете хранимую процедуру из кода .NET, для указанного преобразования применяются параметры NLS драйвера базы данных .NET.

Чтобы сделать возвращаемое значение стабильным, необходимо преобразовать (= отформатировать) значение sysdate встрока перед объединением строк в вашей хранимой процедуре, т. е.

create or replace function my_cool_proc
    return varchar2
is
begin
    return 'Wow look at this time: '||to_char(sysdate, 'yyyymmdd hh24:mi:ss')||chr(13)||chr(10)||'now that is one cool datetime';
end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...