【发布时间】:2016-03-17 20:40:54
【问题描述】:
我有一个 Oracle 存储函数,在 Oracle 中调用如下:
DECLARE
return_data varchar2(32767);
BEGIN
return_data := UCB_SYNC.GET_PROTEIN_DETAILS('PB0000007');
DBMS_OUTPUT.PUT_LINE(return_data);
END;
这很好用,所以我现在想在 C# 中调用它;所以我有以下代码:
public string ExecuteStoredProcedure()
{
using (DbConnection cnn = GetNewConnection())
{
cnn.Open();
using (DbCommand cmd = cnn.CreateCommand())
{
cmd.CommandText = "ucb_sync.get_protein_details";
cmd.CommandType = CommandType.StoredProcedure;
DbParameter dbp = cmd.CreateParameter();
dbp.ParameterName = "protein_batch_id";
dbp.Value = "PB0000007";
dbp.DbType = DbType.String;
cmd.Parameters.Add(dbp);
DbParameter returnDbp = cmd.CreateParameter();
returnDbp.Direction = ParameterDirection.ReturnValue;
returnDbp.ParameterName ="result_data";
returnDbp.DbType = DbType.String;
cmd.Parameters.Add(returnDbp);
try
{
cmd.ExecuteNonQuery();
}
catch (Exception e)
{
throw e;
}
return returnDbp.Value.ToString();
}
}
}
这会执行,但第一个参数 (protein_batch_id) 作为空字符串传递。我可以从我的日志中看到这一点,并且从 Oracle 返回的异常也证实了这一点。
这是一个简单的问题;谁能看到我在做什么使第一个参数作为空字符串传递?
感谢您的帮助;天黑了,很晚了,我需要在回家之前完成这件事!
【问题讨论】:
-
你确定函数的参数名称实际上是
protein_batch_id吗?那么return_data := UCB_SYNC.GET_PROTEIN_DETAILS(protein_batch_id => 'PB0000007');也成功调用了函数? -
是的;我刚试过
标签: c# oracle stored-functions