以下代码使用的是: System.Data.OracleClient (.NET For Oracle Data Provider),使用
1. 如何调用Oracle PL/SQL中有返回值的Function?可以通过Command和Parameter对象匹配调用。
添加的Parameter被匹配为返回值和参数,第一个Parameter是返回值,然后都是传入PL/SQL的参数。
private void button1_Click(object sender, System.EventArgs e)
{
string connectionString = "User ID=scott;Password=tiger;Data Source=FIREFOX;";
string strPLSQL = "PLSQL_HELLO_WORLD.SAY_HELLO";
OracleConnection conn = new OracleConnection(connectionString);
OracleCommand cmd = new OracleCommand(strPLSQL, conn);
cmd.CommandType = CommandType.StoredProcedure;
// Param ReturnValue:
cmd.Parameters.Add("PO_RETURN", OracleType.VarChar, 20);
cmd.Parameters["PO_RETURN"].Direction = ParameterDirection.ReturnValue;
// Param 1: 注意,这里PI_NAME必须和PLSQL里的名字相符(大小写不敏感),否则抛出ORA-06550错误。
cmd.Parameters.Add("PI_NAME", OracleType.VarChar, 10);
cmd.Parameters["PI_NAME"].Direction = ParameterDirection.Input;
cmd.Parameters["PI_NAME"].Value = "firefox";
try
{
conn.Open();
cmd.ExecuteNonQuery();
string strRet = cmd.Parameters["PO_RETURN"].Value.ToString();
MessageBox.Show(strRet);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
conn.Close();
}
}
呵呵, 用点技巧来调用PL/SQL带返回值的Function: select... from dual
/// <summary>
/// Call the function of Oracle.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, System.EventArgs e)
{
string connectionString = "User ID=scott;Password=tiger;Data Source=FIREFOX;";
OracleConnection conn = new OracleConnection(connectionString);
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT PLSQL_HELLO_WORLD.SAY_HELLO(:PI_NAME) FROM DUAL";
cmd.Parameters.Add("PI_NAME", OracleType.VarChar, 20);
cmd.Parameters["PI_NAME"].Direction = ParameterDirection.Input;
cmd.Parameters["PI_NAME"].Value = "firefox";
try
{
conn.Open();
string strRet = cmd.ExecuteScalar() as string;
MessageBox.Show(strRet);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
conn.Close();
}
}
如何返回游标cursor, 这里,cursor只能是output parameter。使用Command来获取Cursor时必须使用ExecuteReader()
private void button3_Click(object sender, System.EventArgs e)
{
string connectionString = "User ID=scott;Password=tiger;Data Source=FIREFOX;";
string strPLSQL = "PLSQL_HELLO_WORLD.OPEN_ONE_CURSOR";
OracleConnection conn = new OracleConnection(connectionString);
OracleCommand cmd = new OracleCommand(strPLSQL, conn);
cmd.CommandType = CommandType.StoredProcedure;
// Param 1:
cmd.Parameters.Add("N_EMPNO", OracleType.Number, 2);
cmd.Parameters["N_EMPNO"].Direction = ParameterDirection.Input;
cmd.Parameters["N_EMPNO"].Value = 0;
// Param 2:
cmd.Parameters.Add("IO_CURSOR", OracleType.Cursor);
cmd.Parameters["IO_CURSOR"].Direction = ParameterDirection.Output;
OracleDataReader odr = null;
try
{
conn.Open();
odr = cmd.ExecuteReader();
while(odr.Read())
{
MessageBox.Show(odr.GetValue(0).ToString());
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
if(odr != null)
odr.Close();
conn.Close();
}
}
当然也可以使用OracleDataAdapter:
private void button5_Click(object sender, System.EventArgs e)
{
string connectionString = "User ID=scott;Password=tiger;Data Source=FIREFOX;";
string strPLSQL = "PLSQL_HELLO_WORLD.OPEN_ONE_CURSOR";
OracleConnection conn = new OracleConnection(connectionString);
OracleCommand cmd = new OracleCommand(strPLSQL, conn);
cmd.CommandType = CommandType.StoredProcedure;
// Param 1:
cmd.Parameters.Add("N_EMPNO", OracleType.Number, 2);
cmd.Parameters["N_EMPNO"].Direction = ParameterDirection.Input;
cmd.Parameters["N_EMPNO"].Value = 30;
// Param 2:
cmd.Parameters.Add("IO_CURSOR", OracleType.Cursor);
cmd.Parameters["IO_CURSOR"].Direction = ParameterDirection.Output;
OracleDataAdapter adp = new OracleDataAdapter();
adp.SelectCommand = cmd;
try
{
DataTable dt = new DataTable();
adp.Fill(dt);
this.dataGrid1.DataSource = dt;
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
附:PL/SQL
分享到:
相关推荐
Oracle 10g 第 2 版 ODAC 和 Oracle Developer Tools for Visual Studio .NET 下载文件 ODTwithODAC1020221.exe 235 MB(247,296,458 字节) ODAC 安装说明 Oracle Developer Tools For Visual ...
Pro ODP.NET for Oracle Database 11g.pdf
ODP.NET_Managed121020
oracle ODP.NET 批量插入或更新
对于asp.net访问oracle数据库,微软已经再支持data.oraclecliet,意见使用odp.net来访问oracle了哦。比data.oraclecliet访问数据库效率更高的odp.net,使用微软的oraclehelper改写得到
C#连接Oracle所需的ODP.NET,这里是从Oracle网站下载的, 现在在官网上下载的几乎都是12g版本了。
使用ODP.net 操作oracle 数据库 使用ODP.NET访问oracle效率比data.OracleClient高
使用了,ODP.NET 方式链接数据库,只要把Oracle.ManagedDataAccess.dll引入取代以前的Oracle.DataAccess.dll即可。 这种方式也是oracle公司提供的,稳定性要比之前那种更好,而且也是免安装客户端的,目前还没测试...
通过ODP.NET 11g用Oracle Advanced Queue进行消息编程.pdf
包含8个dll文件,163M。 oci.dll ociw32.dll Oracle.DataAccess.dll orannzsbb11.dll oraocci11.dll oraociei11.dll oraociicus11.dll OraOps11w.dll
使用C#(Odp.Net)操作Oracle数据库:免安装Oracle客户端,利用即时客户端文件(11_2),与x64 Odp.Net,操作数据库。亲测可用。 x64的只能在64位系统上运行。而x86可以在32位和64位系统上运行。 x86下载路径:...
注:该dll支持.net framework 4.0,并在vs2010内测试通过,使用2.0的就不要下载了 如果下载的dll不能用,可尝试到oracle网站: http://www.oracle.com/technetwork/database/windows/downloads/index-101290.html ...
net中使用ODP.net访问Oracle数据库(无客户端部署方法)
ADO.net ODP.net 实例,教程,源代码。PPT 实用性强 三层架构 为初学者量身定做
官方ODP.NET开发文档(oracle 11g r2)
ODP.NET—DLL 这是一个dll,直接引入即可。
不需要安装客户端就能访问oralce数据库的Oracle.ManagedDataAccess.dll
版本: ODAC1120320 适用于:11g, 10g .net 连接 Oracle 的利器,不再需要客户端, 有这几个dll即可。 由于版本众多, 提取了一些公共文件, 请按说明...http://blog.csdn.net/yenange/article/details/11880479
ODP.NET_Managed_ODAC122cR1ODP.NET_Managed_ODAC122cR1