问题描述
我在 ASP.NET MVC 中有以下实时程序,用于监视 sql Server 中的表更改,它适用于一个会话,但我想显示指定会话的表中所做的更改。
这是我的代码:
集线器
public class MessagesHub : Hub {
[HubMethodName("sendMessages")]
public static void SendMessages()
{
IHubContext context = GlobalHost.ConnectionManager.GetHubContext<MessagesHub>();
context.Clients.All.updateMessages();
}
}
sqlDependency
public class MessagesRepository
{
readonly string _connString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
public IEnumerable<Messages> GetAllMessages(string name)
{
var messages = new List<Messages>();
using (var connection = new sqlConnection(_connString))
{
connection.open();
using (var command = new sqlCommand(@"SELECT [id],[name],[age] FROM [dbo].[people]",connection))
{
command.Notification = null;
var dependency = new sqlDependency(command);
dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
if (connection.State == ConnectionState.Closed)
connection.open();
var reader = command.ExecuteReader();
while (reader.Read())
{
if (!string.IsNullOrEmpty(name))
{
if ((string)reader["name"] == name)
{
messages.Add(item: new Messages { ID = (int)reader["id"],Name = (string)reader["name"] });
}
}
else
{
messages.Add(item: new Messages { ID = (int)reader["id"],Name = (string)reader["name"] });
}
}
}
}
return messages;
}
private void dependency_OnChange(object sender,sqlNotificationEventArgs e)
{
if (e.Type == sqlNotificationType.Change)
{
MessagesHub.SendMessages();
}
}
}
控制器
public class HomeController : Controller
{
public static string name;
public ActionResult Index(string txt)
{
name = txt;
return View();
}
public ActionResult About()
{
ViewBag.Message = "Your application description page.";
return View();
}
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
public ActionResult GetMessages()
{
MessagesRepository model = new MessagesRepository();
return PartialView("_MessagesList",model.GetAllMessages(name));
}
}
Index.cshtml
<div class="row">
<div class="col-md-12">
<div id="messagesTable"></div>
</div>
<form>
<label>condition</label> <input name="txt" />
<input name="id" />
<button name="buttons" value="values" id="buttons">Apply Condition</button>
</form>
</div>
@section Scripts{
<script src="/Scripts/jquery.signalR-2.1.1.js"></script>
<!--Reference the autogenerated SignalR hub script. -->
<script src="/signalr/hubs"></script>
<script type="text/javascript">
$(function () {
// Declare a proxy to reference the hub.
var notifications = $.connection.messagesHub;
//debugger;
// Create a function that the hub can call to broadcast messages.
notifications.client.updateMessages = function () {
getAllMessages()
};
// Start the connection.
$.connection.hub.start().done(function () {
var cid = $.connection.hub.id;
$("#connectionId").val(cid);
console.log("connection Id:" + cid);
alert(cid);
getAllMessages();
}).fail(function (e) {
alert(e);
});
});
function getAllMessages() {
var tbl = $('#messagesTable');
$.ajax({
url: '/home/GetMessages',contentType: 'application/html ; charset:utf-8',type: 'GET',dataType: 'html'
}).success(function (result) {
tbl.empty().append(result);
}).error(function () {
});
}
</script>
}
有没有办法指定我在表中所做的更改要为哪个 connectionId 或 UserId 显示?
我希望我的问题很清楚。 任何帮助将不胜感激,因为我非常需要一个解决方案。
谢谢
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)