目前有一个系统,是一个.exe的可执行文件,也有数据库,是sql2000的,但是没有该执行文件的源代码。
当这个系统对sql2000数据库的某个表操作,更新了记录。那么也要对另一个数据库(是oracle的)的某个表
作更新操作。请问各位大哥这个问题用什么方案来解决比较好呢?
    如果利用sql事件探查器来实现行吗?该怎么实现呢?c#里面怎么获取事件探查器里面的update语句呢,
以便利用update语句来分析是不是系统改变了表的状态。

解决方案 »

  1.   

    对oracle数据库的操作我想在c#里面去实现
      

  2.   

    你需要对你的sql2000进行扩展开发,可以实现你需要的功能
      

  3.   

    看看这些应该对你有帮助
    Update/Insert notification with MS SQL 2005 vs Oracletray notification on database update
      

  4.   

    不怕麻煩可以寫另外一個程序監控SQL2000
      

  5.   

    我找到了一个更好的办法SqlDependency对象。
    1.先建一个测试表CREATE TABLE [dbo].[Messages](
      [ID] [int] IDENTITY(1,1) NOT NULL,
      [UserID] [varchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
      [Message] [nvarchar](256) COLLATE Chinese_PRC_CI_AS NOT NULL,
     CONSTRAINT [PK_Messages] PRIMARY KEY CLUSTERED 
    (
      [ID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    )然后可以利用Sql2005的管理器,随便输入几条数据2.控制台程序主要代码using System;
    using System.Configuration;
    using System.Data;
    using System.Data.SqlClient;namespace SqlDependencyTest
    {
      class Program
      {
      private static string _connStr;  static void Main(string[] args)
      {
      _connStr = ConfigurationManager.ConnectionStrings["ConnStr"].ToString();
      SqlDependency.Start(_connStr);//传入连接字符串,启动基于数据库的监听
      UpdateGrid();  Console.Read();
      }
      private static void UpdateGrid()
      {
      using (SqlConnection connection = new SqlConnection(_connStr))
      {
      //依赖是基于某一张表的,而且查询语句只能是简单查询语句,不能带top或*,同时必须指定所有者,即类似[dbo].[]
      using (SqlCommand command = new SqlCommand("select ID,UserID,[Message] From [dbo].[Messages]", connection))
      {
      command.CommandType = CommandType.Text;
      connection.Open();
      SqlDependency dependency = new SqlDependency(command);
      dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);  SqlDataReader sdr = command.ExecuteReader();
      Console.WriteLine();
      while (sdr.Read())
      {
      Console.WriteLine("Id:{0}\tUserId:{1}\tMessage:{2}",sdr["ID"].ToString(), sdr["UserId"].ToString(), sdr["Message"].ToString());
      }
      sdr.Close();
      }
      }
      }
      private static void dependency_OnChange(object sender, SqlNotificationEventArgs e)
      {
      UpdateGrid();
      }
      }
    } 3.测试运行运行该控制台程序后,会输出[Messages]表的所有数据,这时不要关闭控制台程序,直接在Sql2005的管理器里对[Messages]表的数据做些修改(比如新增/删除等),再看一下控制台,会发现自动重新输出了新的数据.
      

  6.   

    问题是SqlDependency只能sql2005中使用,在sql2000中不行
    我在想在sql2000能否实现像上面的功能呢,也就是实现类似
    SqlDependency的功能