2014-09-09 3 views
0

Это SQL Функция:Получение значения из SQL функции с использованием ParameterDirection

create or replace FUNCTION "TEMPXML" 
(
ID IN NUMBER 
) 
RETURN CLOB IS 
val CLOB; 
BEGIN 
val:=null; 
BEGIN 
    SELECT TEMPID INTO val FROM TEMPDATA WHERE TempdataID=I; 
    exception 
    when no_data_found then 
    null; 
end; 
return val; 
END TEMPXML; 

В C# я использую Parameter.ReturnValue но возвращаемое значение всегда DBNull и я получаю исключение Невозможно привести объект типа 'System.DBNull' к типу

sqlCmdSelectReports.Parameters.Add(new OleDbParameter("@xmldata", OleDbType.LongVarChar)).Direction = ParameterDirection.ReturnValue; 
sqlCmdSelectReports.ExecuteNonQuery(); 
String xmlValue = (String)sqlCmdSelectReports.Parameters["@xmldata"].Value; 

последняя строка 'System.String' генерирует исключение. Я использую неправильный код в C# или SQL-функция неправильно закодирована?

+0

Каков тип исключения и что говорит это сообщение? –

+0

ConfigurationError: tmpcore.dll: Невозможно наложить объект типа «System.DBNull» на тип «System.String». at .. В моем первом сообщении последняя строка кода бросает исключение – Roniu

ответ

0

Похоже, вы просто получаете нуль обратно из базы данных, которая не является совершенно неожиданным (no_ata_found и т.д.)

Просто проверить, что; в одном направлении (из нескольких):

string xmlValue = sqlCmdSelectReports.Parameters["@xmldata"].Value as string; 
Смежные вопросы