OracleDependency所在程序集:Oracle.DataAccess.dll,注意在安装目录下的
ODP.NET\bin\2.x目录中可以找到Oracle.DataAccess.dll文件
引言
在.NET应用程序中,我们有很多方法实现对Oracle数据库的访问。但是从功能和性能上来分析,Oracle Da
本文将介绍Oracle Database的新功能之一:Change Notification。为了能更好的说明这个新功能,我将用例程的方式来介绍它的定义和使用方法。
Database Change Notification的产生背景
在现在的程序开发过程中,我们经常考虑的一个提高性能的方法就是用da
1. 让用户手动的更新da
2. 让我们的程序间隔一定的时间自动去更新da
不难看出,这两种方法都有相当的局限性。
第一种方法用户必须记住经常的去更新数据,如果数据库中的数据改了但是用户并没有去更新数据,这样将导致错误。第二种方法的局限性是我们没有办法设置一个恰好的时间间隔使数据库数据变化的时候保证da
Database Change Notification就是为了解决这个难题。
Database Change Notification 的基本概念
Database Change Notification的作用就是当数据库中的数据发生变化的时候,自动发出一个通知。
用Database Change Notification有三个步骤:
1. 注册:指定数据库要监听的查询。ODP.NET自动注册基于这个查询的监听事件。数据库可以监听DML(Da
2. 通知:一旦数据库中的数据发生变化,数据库将自动发出通知,我们要在我们的程序中定义事件处理操作。
3. 响应:在我们的程序中,一旦收到通知,我们一般情况下会自动更新da
举例:
在ODP.NET中使用Database Change Notification很简单,请看下面的例程。这个例程用HR数据库用户。
|
static void Main(string[] args)
{ string sql = "select first_name, last_name, salary from employees where employee_id = 149";
string constr = "User Id=hr;Password=hr;Da OracleConnection con = new OracleConnection(constr); con.Open(); OracleCommand cmd = new OracleCommand(sql, con); OracleDependency dep = new OracleDependency(cmd);
dep.On cmd.ExecuteNonQuery(); while (notificationReceived == false) { Console.WriteLine("Waiting for notification..."); System.Threading.Thread.Sleep(2000); } cmd.Dispose(); con.Dispose(); Console.WriteLine("Press ENTER to continue..."); Console.ReadLine(); }
public static void On { Console.WriteLine("Database Change Notification received!"); DataTable changeDetails = args.Details; Console.WriteLine("Resource {0} has changed.", changeDetails.Rows[0]["ResourceName"]); notificationReceived = true; } |
HR一定要有change notification 权限,我们用下面的命令。
| grant change notification to hr; |
在你的电脑上安装ODP.NET,添加下面的using statement在你的代码刚开始的地方。
|
using System.Threading;
using System.Da using Oracle.DataAccess.Client; |
现在你就可以运行这段例程了。输出如下:
| Waiting for notification... |
这个时候去修改你的数据库,例如用下面的命令,
|
update employees set salary = salary+10
where employee_id = 149; commit; |
可以看到有如下的输出,
|
Database Change Notification received!
Resource HR.EMPLOYEES has changed. |
