获取来自Oracle存储过程
问题描述:
我有一个Oracle过程值应该返回所有获取来自Oracle存储过程
create or replace procedure tin_builder (type in varchar2,
tin_serial in number, rand_digit in varchar2, tin out varchar2) is
BEGIN
tin := type || TO_CHAR(tin_serial) || rand_digit ;
END
现在我想从Visual Studio 2008(C#代码)
public void TinBuilder(string type, long tin_serial, string rand_digit)
{
OracleConnection connection = new OracleConnection("Data Source=xe;User ID=system;Password=******;");
OracleCommand cmd = new OracleCommand();
cmd.Connection = connection;
cmd.CommandText = "tin_builder";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("type", OracleDbType.Varchar2).Value = type;
cmd.Parameters.Add("tin_serial", OracleDbType.Decimal).Value = tin_serial;
cmd.Parameters.Add("rand_digit", OracleDbType.Varchar2).Value = rand_digit;
cmd.Parameters.Add("tin", OracleDbType.Varchar2).Direction = ParameterDirection.ReturnValue;
try
{
connection.Open();
cmd.ExecuteNonQuery();
TextBox1.Text = cmd.Parameters["tin"].Value.ToString();
}
catch (Exception ex)
{
}
finally
{
connection.Close();
}
}
调用过程的参数的连接字符串
然后把它称为:
TinBuilder("1", 10000001, "37");
但它并不显示在文本中的任何值盒子:(。请有人帮助我。
答
“类型”是Oracle中的保留字。这里的链接:http://www.cs.umbc.edu/help/oracle8/server.815/a42525/apb.htm
而且如OMG小马所说&尝试:SELECT type || TO_CHAR(tin_serial)|| rand_digit INTO tin FROM DUAL;
而且还要确保你总是'发起'异常以捕捉这些类型的错误
答
“类型”可能是保留字。你确定程序已编译并且有效吗?
你还在那里捕捉任何错误消息,并用catch子句隐藏它们吗?这似乎是不好的做法。
你测试了你的sproc吗?我会使用'SELECT type || TO_CHAR(tin_serial)|| rand_digit INTO tin FROM DUAL;'而不是你拥有的。另外 - 很好地明确参数声明:'tin IN OUT varchar2'而不是'tin OUT varchar2'。 – 2009-12-05 17:50:10
我不知道为什么我的存储过程无法正常工作。当我执行过程时,它显示“SQL语句正在运行”! – FlintOff 2009-12-05 18:47:14
我应该运行什么特定服务? – FlintOff 2009-12-05 18:48:01