从C#调用Oracle存储过程?
我刚开始阅读关于存储过程。 任何人都可以请帮助我在C#中的Oracle调用存储过程?
请访问Oracle为Microsoft OracleClient Developers设置的ODP网站: http : //www.oracle.com/technetwork/topics/dotnet/index-085703.html
另外下面是一个示例代码,可以让你开始调用从C#到Oracle的存储过程。 PKG_COLLECTION.CSP_COLLECTION_HDR_SELECT是build立在Oracle接受参数PUNIT,POFFICE,PRECEIPT_NBR并在T_CURSOR中返回结果的存储过程。
using Oracle.DataAccess; using Oracle.DataAccess.Client; public DataTable GetHeader_BySproc(string unit, string office, string receiptno) { using (OracleConnection cn = new OracleConnection(DatabaseHelper.GetConnectionString())) { OracleDataAdapter da = new OracleDataAdapter(); OracleCommand cmd = new OracleCommand(); cmd.Connection = cn; cmd.InitialLONGFetchSize = 1000; cmd.CommandText = DatabaseHelper.GetDBOwner() + "PKG_COLLECTION.CSP_COLLECTION_HDR_SELECT"; cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("PUNIT", OracleDbType.Char).Value = unit; cmd.Parameters.Add("POFFICE", OracleDbType.Char).Value = office; cmd.Parameters.Add("PRECEIPT_NBR", OracleDbType.Int32).Value = receiptno; cmd.Parameters.Add("T_CURSOR", OracleDbType.RefCursor).Direction = ParameterDirection.Output; da.SelectCommand = cmd; DataTable dt = new DataTable(); da.Fill(dt); return dt; } }
我现在已经有了从C#调用程序所需的步骤
//GIVE PROCEDURE NAME cmd = new OracleCommand("PROCEDURE_NAME", con); cmd.CommandType = CommandType.StoredProcedure; //ASSIGN PARAMETERS TO BE PASSED cmd.Parameters.Add("PARAM1",OracleDbType.Varchar2).Value = VAL1; cmd.Parameters.Add("PARAM2",OracleDbType.Varchar2).Value = VAL2; //THIS PARAMETER MAY BE USED TO RETURN RESULT OF PROCEDURE CALL cmd.Parameters.Add("vSUCCESS", OracleDbType.Varchar2, 1); cmd.Parameters["vSUCCESS"].Direction = ParameterDirection.Output; //USE THIS PARAMETER CASE CURSOR IS RETURNED FROM PROCEDURE cmd.Parameters.Add("vCHASSIS_RESULT",OracleDbType.RefCursor,ParameterDirection.InputOutput); //CALL PROCEDURE con.Open(); OracleDataAdapter da = new OracleDataAdapter(cmd); cmd.ExecuteNonQuery(); //RETURN VALUE if (cmd.Parameters["vSUCCESS"].Value.ToString().Equals("T")) { //YOUR CODE } //OR //IN CASE CURSOR IS TO BE USED, STORE IT IN DATATABLE con.Open(); OracleDataAdapter da = new OracleDataAdapter(cmd); da.Fill(dt);
希望这可以帮助
这个代码很适合我调用oracle存储过程
在解决scheme资源pipe理器>添加引用> .Net然后添加名称空间,右键单击您的项目名称添加引用。
using System.Data.OracleClient; using System.Data;
然后将此代码粘贴到事件处理程序中
string str = "User ID=username;Password=password;Data Source=Test"; OracleConnection conn = new OracleConnection(str); OracleCommand cmd = new OracleCommand("stored_procedure_name", conn); cmd.CommandType = CommandType.StoredProcedure; --Ad parameter list-- cmd.Parameters.Add("parameter_name", "varchar2").Value = value; .... conn.Open(); cmd.ExecuteNonQuery();
和它完成…快乐编码与C#
它基本上与非查询命令具有相同的机制:
- command.CommandText =存储过程的名称
- command.CommandType =
CommandType.StoredProcedure
- 多次调用command.Parameters.Add作为sp所需的参数数量
- command.ExecuteNonQuery
这里有很多例子,Google返回的第一个例子就是这个例子
如果你的SP是一个函数,你也可能陷入一个小陷阱,你的返回值参数必须是参数集合中的第一个参数
在.Net中,通过版本4可以像SQL Server存储过程一样完成,但是需要注意的是:
using System.Data.OracleClient;
这里有一些系统要求 ,你应该validation在你的情况下。
Microsoft 从.Net 4开始不再使用这个命名空间,所以将来需要第三方提供者。 考虑到这一点,您可能会更好地使用Oracle数据提供程序.Net (ODP.NET)的单词go – 这个优化不在Microsoft类中。 还有其他的第三方select,但甲骨文在保持.Net开发者的权利方面有很强的既得利益,所以他们应该是好的。