我有一个Oracle存储过程(SP)返回varchar
参数,但是当我执行SP并尝试读取输出时,字符串被剪切掉。当我在Toad上执行SP并发出dbms.output
时,字符串就会被很好地返回。
procedure testStringOutput(num in number, str out varchar2)
as
V_C NUMBER(38);
V_E VARCHAR2(2000);
begin
select '12345678910111213141516171819PPPPPPPPPPPPPPPPPPPPPPPPP'
into str
FROM DUAL;
exception
when others then
V_C := SQLCODE;
V_E:= SQLERRM;
dbms_output.put_line(V_C||'-> '||V_E);
end;
我将SP称为脚本的方式:
declare
P2 VARCHAR2(2000) :='';
begin
PKGTEST.TESTSTRINGOUTPUT(1,P2);
dbms_output.put_line('output string - > '||P2);
end;
输出:
output string - > 12345678910111213141516171819PPPPPPPPPPPPPPPPPPPPPPPPP
从c#调用SP的方式:
public void TestOutputString()
{
string str = string.Empty;
using (connection)
{
OracleCommand objCmd = new OracleCommand();
objCmd.Connection = connection;
objCmd.CommandText = "PKGTEST.testStringOutput";
objCmd.CommandType = CommandType.StoredProcedure;
objCmd.Parameters.Add("num", OracleType.Number).Value = 0;
objCmd.Parameters.Add("str", OracleType.VarChar, 2000).Direction = ParameterDirection.Output;
foreach (OracleParameter parameter in objCmd.Parameters)
if (parameter.Value == null)
parameter.Value = DBNull.Value;
try
{
connection.Open();
objCmd.ExecuteNonQuery();
str = (objCmd.Parameters["str"].Value.ToString());
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
connection.Close();
}
}
但是当我检查响应字符串时,它被拆分为123456789101112131415161718
,另一部分(19PPPPPPPPPPPPPPPPPPPPPPPPP
)丢失。请参阅此image。
我做错了什么?
更新:我确定它发生了,SP向WCF服务返回消息,但是当客户端收到响应时,它被拆分了。
答案 0 :(得分:0)
最后我必须使用Oracle数据提供程序odp.net而不是ado.net - System.Data.OracleClient(不建议使用)并且它可以工作。