我正在尝试向过程发送参数,并根据过程返回的输出执行一些操作。我有一个公共类来处理添加参数和调用过程。该类将被称为:
obj.addparameter(parametername, parametervalue, oracletype.datatype, parameterdirection.input)
所以假设我有一个过程,它将客户ID作为参数并输出名称。
PROCEDURE get_customer_name(
c_customer_id IN Number,
c_customer_name OUT VARCHAR)
IS
BEGIN
SELECT last_name || ' ' || middle_name || ' ' || first_name
INTO c_customer_name
FROM CUSTOMER WHERE CUSTOMER_ID = c_customer_id;
END;
要调用上述过程,我需要调用类:
obj.addparameter("customerId", 123, oracletype.number, parameterdirection.Input)
obj.addparameter("customerName", dbnull.value, oracletype.varchar, parameterdirection.output)
该类具有以下代码:
if (param.ParamDirection == ParameterDirection.Output)
{
command.Parameters.Add(c_customer_name,oracletype.varchar);
command.parameters["c_customer_name"].direction = parameterdirection.output
}
else
{
command.parameters.add("c_customer_id",oracletype.number).value = 123;
command.parameters["c_customer_id"].direction = parameterdirection.input
}
command.commandType = commandType.StoredProcedure;
command.executenonquery();//Error: c_customer_name "No size set for variable length data type: String."
当我运行上面的代码时,我收到一个错误:
“没有为可变长度数据类型设置大小:字符串。”
我必须在下面的行中添加列的大小以避免错误。
command.Parameters.Add(c_customer_name,oracletype.varchar,50)//Add size to output parameter
有没有办法避免将size属性添加到输出参数。 According to MSDN,看起来需要为输出参数添加size属性。如果是那样的话,那么如何处理不同输出参数的大小。我可能会将“客户名称”,“地址”作为参数返回,但我不想为不同的输出参数指定大小。 我正在使用带有C#代码隐藏和Oracle数据库的.NET4.0。