问一下,用c#实时扫描数据库的方法

解决方案 »

  1.   

    如果是WinForm的话,简单点用的时间控件,定时去扫描下数据库
      

  2.   

    实时扫描是定时扫描还是数据库有了变化就扫描
    前者用timer
    后者用触发器
      

  3.   

    对!你可以在数据库前加一个数据访问层次,对数据库的访问都通过它,一旦有人修改数据库,你就触发EVENT,让各个客户端了解响应信息。event里可以封装有关数据库更新的信息
      

  4.   

    什么叫扫描数据库?我大概写了一小段,呵呵。你自己看看……内容通过了编译,但我没有测试任何DBProcessor,如果你要写自己的处理器,继承一下DBProcessor,重载execute就可以了。这个类循环执行指定的数据库处理程序,你可以写N多的DBProcessor,比如:检查某条记录或者某行记录是否存在,或者执行一次插入,合并,更新的语句等。  public class DBEngine
        {
            private List<DBProcessor> procor;
            private Thread executing;        public DBEngine()
            {
                procor = new List<DBProcessor>();        }        public void RegisterProcor(DBProcessor dbp)
            {
                if (!executing.IsAlive)
                    procor.Add(dbp);
            }        private void Executing()
            {
                while (true)
                {
                    Thread.Sleep(3000);
                    foreach (var i in procor)
                    {
                        try
                        {
                            i.Excute();
                        }
                        catch
                        {
                        }
                        Thread.Sleep(500);
                    }
                }
            }
        }
    下面这个类是用于处理数据库中的数据的……    public abstract class DBProcessor
        {                protected SqlConnection conn;        public DBProcessor(SqlConnection conn)
            {
                this.conn = conn;
            }        public abstract void Excute();        protected void ExexuteSQLException(string s)
            {
                SqlCommand scu = new SqlCommand(s, conn);
                scu.ExecuteNonQuery();
            }        protected void ExecuteSQLList(List<string> sqls)
            {
                SqlTransaction st = Config.co_exe.BeginTransaction();
                try
                {
                    string sqla = "";
                    foreach (var e in sqls)
                    {
                        if (e.Trim().Length > 0)
                            sqla += (e + ";");
                    }
                    SqlCommand scu = new SqlCommand(sqla, Config.co_exe);                scu.Transaction = st;
                    scu.ExecuteNonQuery();                st.Commit();
                }
                catch
                {
                    st.Rollback();
                }
            }    }