c#调用oracle存储过程参数问题
我有一段调用oracle存储过程的c#代码,如下所示:
System.Data.OracleClient.OracleCommand CMD = new OracleCommand(fun_name, con);
CMD.Connection = con;
CMD.CommandType = System.Data.CommandType.StoredProcedure;
CMD.Parameters.Add(new OracleParameter());
CMD.Parameters[0].OracleType = OracleType.Number;
CMD.Parameters[0].Direction = ParameterDirection.Input;
//CMD.Parameters[0].ParameterName = "pi";
CMD.Parameters[0].Value = "2";
CMD.Parameters.Add(new OracleParameter());
CMD.Parameters[1].OracleType = OracleType.VarChar;
CMD.Parameters[1].Size = 20;
CMD.Parameters[1].Direction = ParameterDirection.Input;
//CMD.Parameters[1].ParameterName = "p2";
CMD.Parameters[1].Value = "xx";
CMD.ExecuteNonQuery();
其中有两行代码被注释了,运行时就会报错:参数个数或类型错误。
打开注释就没问题,可是我我又不想传递参数名称,如何处理呢?如果必须传递参数名称,在oracle中如何获取的存储过程的参数名称呢?多谢!
------解决方案-------------------- SqlServer中
Create PROCEDURE [dbo].[AddFile]
@PortalId int,
@FileName nvarchar(100),
@Extension nvarchar(100),
@Size int,
@Width int,
@Height int,
@ContentType nvarchar(200),
@Folder nvarchar(200),
@FolderID int
AS
....
@PortalId这些就是参数名,Oracle中应该差不多吧。
------解决方案-------------------- 路过!!!!!!!!!!
------解决方案-------------------- 运行时就会报错:参数个数或类型错误。
你的写法是正确的,注意参数个数或类型。
或者你可以象下面这样写,一般来说不必把Parameter的属性都设上。
CMD.Parameters.Add(new OracleParameter("@pi", "2"));
------解决方案-------------------- 探讨 谢谢4楼的指点,我主要的问题在于传递参数时不想传递参数名称。
------解决方案--------------------
oracle:
select t.object_name,t.argument_name,t.data_type,t.in_out
from all_arguments t
where t.owner='用户名' and
t.object_name='存储过程名' and
t.package_name='包名'
sql:
select * from syscolumns where ID in
(SELECT id FROM sysobjects as a
WHERE OBJECTPROPERTY(id, N'IsProcedure') = 1
and id = object_id(N'[dbo].[存储过程名]'))
或者在C#中使用SqlCommandBuilder.DeriveParameters(SqlConnection);从数据库中映射
我的异常网推荐解决方案: oracle存储过程,http://www.aiyiweb.com/oracle-develop/177537.html