我的场景是我从一个SQL Server表中获取数据到vb.net DataTable。
现在,如果更改了任何记录或将新记录保存到SQL Server表中,我想仅将该记录提取或更新到我的数据表中。是否可能。
这是因为我的SQL表有超过100万条记录,并且每次提取所有记录几乎是不可能的。
实际上我打算从销售发票表中建立一个条形图,它会在每1分钟或修复一段时间后刷新数据。
答案 0 :(得分:0)
您可以在表格中添加时间戳字段。在插入和更新时将其设置为当前时间,然后查询时间戳大于上次查询中最大时间戳的所有记录。
答案 1 :(得分:0)
您可以将SqlDependency用于数据更改事件。这将确保对数据库中特定表的任何更改发生,将自动触发事件以反映程序中的更改。
在您的数据库中启用代理
ALTER DATABASE [yourdbName] SET ENABLE_BROKER
通过SqlCommand在应用程序和数据库之间创建依赖关系。在此之前,必须为此会话启动SqlDependency。
SqlDependency.Start(m_ConnectionString);
如前所述,依赖关系是基于SqlCommand创建的。
SqlDependency依赖项= new SqlDependency(cmd);
当然,对于此命令中可包含的内容,存在一些限制。该命令必须使用两个部件名称而不使用*。它也必须显然不是UPDATE或INSERT语句。
以下内容不起作用:
SELECT * FROM Message
这将有效:
SELECT ID, Message FROM dbo.Message
如果查询不正确,将立即发送一个事件:
SqlNotificationEventArgs.Info =查询
SqlNotificationEventArgs.Source = Statement
SqlNotificationEventArgs.Type =订阅
有关详细示例和演示应用程序,请参阅Using SqlDependency for data change events