0

これは SQL 関数です。

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' のオブジェクトを型 'System.String' にキャストできないという例外が発生します

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

最後の行は例外をスローします。C# で間違ったコードを使用していますか、それとも SQL 関数のコードが間違っていますか?

4

1 に答える 1

0

データベースから単に null が返されているように見えますが、これはまったく予期しないことではありません (no_ata_foundなど)。

それを確認してください。(いくつかの)1つの方法は次のとおりです。

string xmlValue = sqlCmdSelectReports.Parameters["@xmldata"].Value as string;
于 2014-09-09T11:50:48.107 に答える