以下代码使用的是: 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
分享到:
相关推荐
13. **PL/SQL与Java、.NET等其他平台的集成**:讲解如何使用Oracle的JDBC驱动或ODP.NET与PL/SQL交互,实现跨平台的应用程序开发。 14. **最佳实践**:教材可能还会提供编写高效、可读性强、易于维护的PL/SQL代码的...
总的来说,《Pro ODP.NET for Oracle Database 11g》这本书详细介绍了如何使用ODP.NET开发高效、可靠的Oracle数据库应用,涵盖了从基础的数据库连接到复杂的PL/SQL调用、事务管理和性能优化等多个方面,对于.NET...
ODP.NET Managed ODAC122cR1是一款由Oracle公司提供的数据访问组件,用于.NET开发者在C#、VB.NET等.NET环境中与Oracle数据库进行高效交互。这个版本是12.2c Release 1,主要关注的是托管驱动程序,这意味着它完全在...
标题 "PL/SQL Oracle, Oracle 数据可客户端" 暗示了我们正在讨论Oracle数据库管理系统中的PL/SQL编程语言以及Oracle Data Provider for .NET (ODP.NET)客户端。Oracle Data Provider是Oracle公司提供的一个用于.NET...
它支持多种数据库操作,如事务处理、存储过程调用、参数化查询等,并且能够处理复杂的Oracle特定特性,如LOB类型、PL/SQL块和触发器。 在实际开发中,ODP.NET Managed Driver通过ADO.NET接口提供服务,这使得.NET...
ODP.NET还包含了对高级特性的支持,如BLOB和CLOB数据类型的处理、游标、批处理操作、PL/SQL块的执行以及Oracle特定的功能,如LOB对象的异步读写、触发器、存储过程和函数等。此外,ODP.NET还包括对Oracle Advanced ...
对于PL/SQL过程和函数的支持也很全面,可以通过OracleCommand对象来调用,并通过OracleParameter对象传递参数。 在事务处理方面,ODP.NET支持ACID(原子性、一致性、隔离性和持久性)特性,可以利用Oracle...
使用ODP.NET,你可以执行SQL查询、事务处理、数据检索以及利用Oracle的各种高级特性,从而构建高效、稳定的.NET应用程序。在实际使用过程中,确保阅读"readme.htm"文件并按照指示正确配置和使用ODP.NET是至关重要的...
ODP.NET,全称为Oracle Data Provider for .NET,是Oracle公司提供的.NET数据提供者,专门用于与Oracle数据库进行通信。它扩展了ADO.NET的功能,提供了更高效、更强大的特性,如支持Oracle特定的数据类型、PL/SQL块...
ODP.NET是Oracle专门为.NET Framework设计的数据提供程序,它提供了对Oracle数据库的原生支持,具备高性能、低级访问和高级功能,如PL/SQL块执行、游标、事务管理和复杂数据类型处理。通过ODP.NET,开发者可以直接...
12. **PL/SQL与Java,C++等语言的接口**:Oracle数据库允许PL/SQL与其它编程语言交互,例如通过Java Stored Procedures或ODP.NET等技术。 "Oracle® Database PL/SQL User's Guide and Reference"这份文档深入浅出...
14. **PL/SQL与Java、.NET等外部语言的接口**:了解如何使用PL/SQL调用Java stored procedures,或者通过ODP.NET等接口在.NET环境中操作Oracle数据库。 15. **安全性与权限管理**:理解Oracle的角色和权限体系,...
《Apress.Pro.ODP.NET.for.Oracle.Database.11g》是一本专注于使用ODP.NET(Oracle Data Provider for .NET)与Oracle Database 11g进行开发的专业指南。这本书面向的是.NET开发者,特别是那些希望深入理解如何在C#...
6. **高级特性**:深入讨论了ODP.NET的一些高级特性,如批量操作、游标处理、PL/SQL块的执行,以及异步操作等。 7. **错误处理与性能优化**:提供关于错误捕获和处理的指导,以及如何通过ODP.NET进行性能分析和调优...
通过ODP.NET,.NET客户端可以直接调用存储在Oracle数据库中的XML DB功能,利用Oracle的XML处理能力。 2. **性能优化**: ODP.NET的一个显著优点是它的高性能。由于它不需要额外的数据访问中间件,因此减少了数据...
Oracle调用接口(OCI)和ODP.Net是Oracle数据库与应用程序之间交互的两种主要技术,尤其在.NET开发环境中。这篇文章将深入探讨这两种方法,并在.NET 5.0框架下,结合C#和C++,讨论如何高效地进行Oracle数据库访问。 ...
ODP.NET提供了丰富的API和功能,允许开发者利用SQL和PL/SQL来操作空间数据,同时也支持高级的空间查询和分析。通过ODP.NET,开发者可以实现空间数据的插入、更新、删除,以及执行复杂的空间查询,例如基于地理位置的...
ODP.NET(Oracle Data Provider for .NET)是Oracle公司为.NET开发者提供的一种数据访问组件,它使得.NET应用程序能够高效地连接到Oracle数据库。ODP.NET是Oracle Data Access Components (ODAC) 的一部分,包含了...
ODP.NET(Oracle Data Provider for .NET)是Oracle公司为.NET开发者提供的一种数据访问组件,它使得.NET应用程序能够高效地连接到Oracle数据库。ODP.NET是Oracle Data Access Components (ODAC) 的一部分,是一个...
ODP.NET还支持Oracle的高级特性,例如LOB对象处理、BFILE、REF CURSOR、PL/SQL包等,这些特性在通用的数据提供者中可能无法充分利用。 在实际开发中,结合ODP.NET提供的这些工具和特性,开发者可以构建出高效、稳定...