C# 监听oracle表新增或更新

1.给用户授予权限
在oracle数据库中执行下方语句

 grant change notification to hfspas;

2.在C#中编写代码

public void GetDatabaseChange()
{
//获取A表中系统当天时间的数据
string sql = "select * from tableA where trunc(testDate)=trunc(sysdate)";

string constr = ConfigurationManager.ConnectionStrings["oracle"].ConnectionString;
OracleConnection con = new OracleConnection(constr);
con.Open();
OracleCommand cmd = new OracleCommand(sql, con);
OracleDependency dep = new OracleDependency(cmd);
dep.QueryBasedNotification = false;
//是否在Notification中包含变化数据对应的RowId
dep.RowidInfo = OracleRowidInfo.Include;
dep.OnChange += new OnChangeEventHandler(OnDatabaseNotification);
//是否在一次Notification后立即移除此次注册
cmd.Notification.IsNotifiedOnce = false;
//此次注册的超时时间(秒),超过此时间,注册将被自动移除。0表示不超时。
cmd.Notification.Timeout = 0;
//False表示Notification将被存于内存中,True表示存于数据库中,选择True可以保证即便数据库重启之后,消息仍然不会丢失
cmd.Notification.IsPersistent = true;
cmd.ExecuteNonQuery();
cmd.Dispose();
con.Dispose();
}
 
public void OnDatabaseNotification(object src, OracleNotificationEventArgs args)
{

if (args.Info == OracleNotificationInfo.Insert)
{
//表数据新增时,执行下方代码,同理Insert可以更改为Update
DataTable changeDetails = args.Details;
//notificationReceived = true;
//新增数据的RowId(RowId的值类似'AAAE5fAAFAAAACFAAA')
string rowid = changeDetails.Rows[0]["rowid"].ToString();
//查找新增数据
//...其他处理
//SQL
string sql ="Select * from tableA  where RowId = '"+rowid+"'";

}
}

参考文章

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用以下代码来实现 C# 中的 Oracle 批量更新: ```csharp using Oracle.ManagedDataAccess.Client; using System.Data; public void BatchUpdate() { string connectionString = "Data Source=<your data source>;User ID=<your user id>;Password=<your password>"; using (OracleConnection connection = new OracleConnection(connectionString)) { connection.Open(); using (OracleCommand command = connection.CreateCommand()) { command.CommandType = CommandType.Text; command.CommandText = "UPDATE table_name SET column1 = :column1 WHERE id = :id"; OracleParameter column1Param = new OracleParameter(":column1", OracleDbType.Varchar2); OracleParameter idParam = new OracleParameter(":id", OracleDbType.Int32); command.Parameters.Add(column1Param); command.Parameters.Add(idParam); // Create a DataTable with the data to be updated DataTable dataToUpdate = new DataTable(); dataToUpdate.Columns.Add("Column1", typeof(string)); dataToUpdate.Columns.Add("Id", typeof(int)); // Populate the DataTable with data dataToUpdate.Rows.Add("new value 1", 1); dataToUpdate.Rows.Add("new value 2", 2); dataToUpdate.Rows.Add("new value 3", 3); // Use OracleDataAdapter to update the data in batches using (OracleDataAdapter adapter = new OracleDataAdapter()) { adapter.UpdateBatchSize = 100; // Update 100 rows at a time adapter.UpdateCommand = command; adapter.Update(dataToUpdate); } } } } ``` 这个示例代码演示了如何使用 OracleDataAdapter 来批量更新数据,你只需要将示例中的数据替换为你自己的数据源和格名称即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值