我有一个ASP.Net
页面和一个MySQL
数据库。在页面上午使用Gridview
显示数据库中的数据。网格: -
简而言之,我需要重新绑定网格。我知道他们是否有可能监控页面中的数据库更改,以便在数据库发生任何更改时重新绑定网格。
必须做这样的算法:
If IsTheir any change in myDatabase.Mytable then
MyGrid.ReBind
End If
答案 0 :(得分:1)
创建一个表来存储命令和执行时间TBL_COMMAND_HIST以及标识列。
您可以在MySQL中按计划事件创建,以1秒(或更短)的固定间隔触发。
存储当前正在运行的进程中尚未包含在TBL_COMMAND_HIST中的命令。
检查标识列。如果Identity列比您之前在前端显示的更新,请显示新记录。
您可以对数据库中的任何事件执行此操作,而无需添加任何其他触发器。
除此之外,如果您希望为特定表实现它,您可以引入触发器来填充命令表。
根据命令表中的命令,您可以确定命令是插入,更新还是删除,并相应地刷新页面。
从前端页面,您需要连续ping以检查命令表中的记录。
如果有任何新条目,请刷新您的页面。
答案 1 :(得分:1)
我可能无法使用SqlServer
和C#
来解决您的问题。它可能会帮助其他可能遇到类似问题的人。
您可以使用sqlDataSource,您可以在其中提供CRUD命令和相应参数。例如:
on aspx page:
<asp:SqlDataSource ID="SqlDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:connectionStringName %>"
SelectCommand="SELECT * FROM [TableName] WHERE ([PrimaryFieldID] = @ID) "
<SelectParameters>
<asp:Parameter Name="ID" DbType="Int" />
</SelectParameters>
</asp:SqlDataSource>
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
SqlDataSource.SelectParameters["fieldValue1"].DefaultValue = value1;
SqlDataSource.SelectParameters["fieldValue2"].DefaultValue = value2;
SqlDataSource.SelectParameters["ID"].DefaultValue = value;
}
}
protected void SqlDataSource_Selected(object sender, SqlDataSurceStatusEventArgs e){
// Here you can check for effectedRows
if((e.AffectedRows-1)>0){
// write your code here if rows are affected
}
}
答案 2 :(得分:1)
如果您使用的是MS SQL,则可以查看SqlDependecy Class。
如果您使用的是MySql,请查看MySqlDependency Class。
但是,Haven没有使用SqlDependency Class。希望这有助于您和未来的读者。 :)
答案 3 :(得分:1)
为什么不经常使用定时器控件来刷新网格?除非你需要最新的数据。似乎每分钟左右网格重新加载比添加触发器或表格等更容易。