我是个初学者,想在C#中调用ORACLE的存储过程来返回一个字符串,但是得不到返回值,不知为什么。请大家帮看看oracle存储过程:
create or replace procedure getnamebyid(tblid in int,tmpname in out varchar2) is
begin
select name into tmpname from table1 where id=tblid;
return;
end getnamebyid;
在oracle中调试此存储过程能正确返回name值 C#中
public string GetName(int id)
{
string myName ="";string a = Convert.ToString(OracleHelper.ExecuteScalar(StrConn, CommandType.StoredProcedure,
"getnamebyid",new OracleParameter("tblid", id),
new OracleParameter("tmpname", myName))); return a;
//运行后无论是a,还是myName,都是"" ,
//我如果写string myName="1"运行完后myName就是“1”,根本没有从存储过程得到返回值。
}在oracleHelper中,这个oracleHelper是从网上下载的,应该不会有问题,我要是调用其中的ExecuteNonQuery结果也一样
ublic static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params OracleParameter[] commandParameters)
{
OracleCommand cmd = new OracleCommand();
using (OracleConnection conn = new OracleConnection(connectionString))
{
PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
object val = cmd.ExecuteScalar();
cmd.Parameters.Clear();
return val;
}
}
请大家教教我,该怎么写代码才能得正确得到存储过程的返回值呢?
create or replace procedure getnamebyid(tblid in int,tmpname in out varchar2) is
begin
select name into tmpname from table1 where id=tblid;
return;
end getnamebyid;
在oracle中调试此存储过程能正确返回name值 C#中
public string GetName(int id)
{
string myName ="";string a = Convert.ToString(OracleHelper.ExecuteScalar(StrConn, CommandType.StoredProcedure,
"getnamebyid",new OracleParameter("tblid", id),
new OracleParameter("tmpname", myName))); return a;
//运行后无论是a,还是myName,都是"" ,
//我如果写string myName="1"运行完后myName就是“1”,根本没有从存储过程得到返回值。
}在oracleHelper中,这个oracleHelper是从网上下载的,应该不会有问题,我要是调用其中的ExecuteNonQuery结果也一样
ublic static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params OracleParameter[] commandParameters)
{
OracleCommand cmd = new OracleCommand();
using (OracleConnection conn = new OracleConnection(connectionString))
{
PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
object val = cmd.ExecuteScalar();
cmd.Parameters.Clear();
return val;
}
}
请大家教教我,该怎么写代码才能得正确得到存储过程的返回值呢?
其次对于out类型的参数在传参的时候要指明参数方向看看这个你就明白了
http://blog.csdn.net/zhpsam109/article/details/556971
1 接收out的返回值,不是string a 这种形式。
2 out类型参数要指明方向,今天不在公司,也没有环境,不然提供一段代码给你参考。