调用Oracle存储过程是ASP.NET中经常用到的操作之一。下面我将尝试为您提供一份完整的攻略指导。
准备工作
在调用Oracle存储过程之前,您需要完成以下准备工作:
- 确认已经安装了Oracle Client,并且可以连接到Oracle数据库。
- 在Oracle数据库中创建一个存储过程。
调用存储过程
在ASP.NET中,调用Oracle存储过程有两种方法:
方法一:使用Oracle ODP.NET数据提供程序
该方法需要在ASP.NET项目中添加对Oracle.DataAccess.dll的引用,并需要在代码中引用该命名空间。
下面是一个示例代码:
using Oracle.DataAccess.Client;
using System.Data;
namespace MyNamespace
{
public class MyClass
{
public static void CallOracleProcedure()
{
OracleConnection conn = new OracleConnection("Data Source=MyDataSource;User Id=MyUsername;Password=MyPassword;");
OracleCommand cmd = new OracleCommand("my_proc", conn);
cmd.CommandType = CommandType.StoredProcedure;
OracleParameter param1 = new OracleParameter();
param1.Direction = ParameterDirection.Output;
param1.OracleDbType = OracleDbType.Int32;
param1.ParameterName = "out_param";
cmd.Parameters.Add(param1);
OracleParameter param2 = new OracleParameter();
param2.Direction = ParameterDirection.Input;
param2.OracleDbType = OracleDbType.Varchar2;
param2.ParameterName = "in_param";
param2.Value = "MyInputValue";
cmd.Parameters.Add(param2);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
int outVal = Convert.ToInt32(param1.Value);
}
}
}
在上面的示例代码中:
- "Data Source=MyDataSource;User Id=MyUsername;Password=MyPassword;"是Oracle连接字符串。
- "my_proc"是存储过程的名称。
- 声明了两个参数:一个输入参数"in_param"和一个输出参数"out_param"。
- conn.Open()打开连接,cmd.ExecuteNonQuery()执行存储过程,conn.Close()关闭连接。
- 最后通过param1.Value获取输出参数的值。
方法二:使用System.Data.OracleClient数据提供程序
该方法需要在ASP.NET项目中添加对System.Data.OracleClient.dll的引用,并需要在代码中引用该命名空间。
下面是一个示例代码:
using System.Data.OracleClient;
using System.Data;
namespace MyNamespace
{
public class MyClass
{
public static void CallOracleProcedure()
{
OracleConnection conn = new OracleConnection("Data Source=MyDataSource;User Id=MyUsername;Password=MyPassword;");
OracleCommand cmd = new OracleCommand("my_proc", conn);
cmd.CommandType = CommandType.StoredProcedure;
OracleParameter param1 = new OracleParameter();
param1.Direction = ParameterDirection.Output;
param1.DbType = DbType.Int32;
param1.ParameterName = "out_param";
cmd.Parameters.Add(param1);
OracleParameter param2 = new OracleParameter();
param2.Direction = ParameterDirection.Input;
param2.DbType = DbType.String;
param2.ParameterName = "in_param";
param2.Value = "MyInputValue";
cmd.Parameters.Add(param2);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
int outVal = Convert.ToInt32(param1.Value);
}
}
}
需要注意的是,在代码示例中:
- "Data Source=MyDataSource;User Id=MyUsername;Password=MyPassword;"是Oracle连接字符串。
- "my_proc"是存储过程的名称。
- 声明了两个参数:一个输入参数"in_param"和一个输出参数"out_param"。
- conn.Open()打开连接,cmd.ExecuteNonQuery()执行存储过程,conn.Close()关闭连接。
- 最后通过param1.Value获取输出参数的值。
示例说明
下面是一个更完整的示例,其中演示了如何在ASP.NET MVC项目中调用Oracle存储过程。在这个示例中,我们将使用Oracle ODP.NET数据提供程序。
- 在Visual Studio中创建一个新的ASP.NET MVC项目。
- 在项目中添加对Oracle.DataAccess.dll的引用,同时在Web.config文件中配置连接字符串和Oracle连接池。
<connectionStrings>
<add name="MyConnection" providerName="Oracle.DataAccess.Client" connectionString="Data Source=MyDataSource;User Id=MyUsername;Password=MyPassword;" />
</connectionStrings>
<system.data>
<DbProviderFactories>
<add name="Oracle Data Provider for .NET" invariant="Oracle.DataAccess.Client" description="Oracle Data Provider for .NET" type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</DbProviderFactories>
</system.data>
<oracle.manageddataaccess.client>
<version number="*">
<dataSources>
<dataSource alias="MyDataSource" descriptor="(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort)))(CONNECT_DATA=(SID=MySID)))" />
</dataSources>
</version>
</oracle.manageddataaccess.client>
- 在Controllers文件夹下创建一个名为OracleController的控制器,添加一个名为CallProcedure的Action。在Action中添加下面的代码:
public ActionResult CallProcedure()
{
using (OracleConnection conn = new OracleConnection(ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString))
{
using (OracleCommand cmd = new OracleCommand("my_proc", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
OracleParameter param1 = new OracleParameter();
param1.Direction = ParameterDirection.Output;
param1.OracleDbType = OracleDbType.Int32;
param1.ParameterName = "out_param";
cmd.Parameters.Add(param1);
OracleParameter param2 = new OracleParameter();
param2.Direction = ParameterDirection.Input;
param2.OracleDbType = OracleDbType.Varchar2;
param2.ParameterName = "in_param";
param2.Value = "MyInputValue";
cmd.Parameters.Add(param2);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
ViewBag.OutParam = param1.Value;
}
}
return View();
}
在代码示例中:
- ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString是连接字符串。
- "my_proc"是存储过程的名称。
- 声明了两个参数:一个输入参数"in_param"和一个输出参数"out_param"。
- 使用ViewBag.OutParam将输出参数的值传递到View中。
- 在Views文件夹下创建一个名为CallProcedure的视图文件,添加下面的代码:
@{
ViewBag.Title = "Call Procedure";
}
<h2>Call Procedure</h2>
<p>Out parameter value: @ViewBag.OutParam</p>
- 运行项目,访问http://localhost:xxxxx/Oracle/CallProcedure,查看存储过程的输出参数值。
总结
以上就是在ASP.NET中调用Oracle存储过程的完整攻略,我们演示了两种方法,并提供了一个示例来帮助您更好地理解。在实际使用中,请根据自己的需要进行选择。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:asp.net中调用oracle存储过程的方法 - Python技术站