设为首页 加入收藏

TOP

使用SignalR和SQLTableDependency跟踪数据库中记录的变动(二)
2019-09-17 18:02:01 】 浏览:65
Tags:使用 SignalR SQLTableDependency 跟踪 数据库 记录 变动
Dependency.OnError += SqlTableDependency_OnError;
            _tableDependency.Start();
        }
 
        public static StockTicker Instance
        {
            get
            {
                return _instance.Value;
            }
        }
 
        private IHubConnectionContext<dynamic> Clients
        {
            get;
            set;
        }
 
        public IEnumerable<Stock> GetAllStocks()
        {
            var stockModel = new List<Stock>();
 
            var connectionString = ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;
            using (var sqlConnection = new SqlConnection(connectionString))
            {
                sqlConnection.Open();
                using (var sqlCommand = sqlConnection.CreateCommand())
                {
                    sqlCommand.CommandText = "SELECT * FROM [Stocks]";
 
                    using (var sqlDataReader = sqlCommand.ExecuteReader())
                    {
                        while (sqlDataReader.Read())
                        {
                            var code = sqlDataReader.GetString(sqlDataReader.GetOrdinal("Code"));
                            var name = sqlDataReader.GetString(sqlDataReader.GetOrdinal("Name"));
                            var price = sqlDataReader.GetDecimal(sqlDataReader.GetOrdinal("Price"));
 
                            stockModel.Add(new Stock { Symbol = code, Name = name, Price = price });
                        }
                    }
                }
            }
 
            return stockModel;
        }
 
        private void SqlTableDependency_OnError(object sender, ErrorEventArgs e)
        {
            throw e.Error;
        }
 
        /// <summary>
        /// Broadcast New Stock Price
        /// </summary>
        private void SqlTableDependency_Changed(object sender, RecordChangedEventArgs<Stock> e)
        {
            if (e.ChangeType != ChangeType.None)
            {
                BroadcastStockPrice(e.Entity);
            }
        }
 
        private void BroadcastStockPrice(Stock stock)
        {
            Clients.All.updateStockPrice(stock);
        }
 
        #region IDisposable Support
 
        private bool disposedValue = false; // To detect redundant calls
 
        protected virtual void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                if (disposing)
                {
                    _tableDependency.Stop();
                }
 
                disposedValue = true;
            }
        }
 
        ~StockTicker()
        {
            Dispose(false);
        }
 
        // This code added to correctly implement the disposable pattern.
        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }
 
        #endregion IDisposable Support
    }

 

现在来看一下HTML页面:

<!DOCTYPE html>
<html>
<head>
    <title>SqlTableDependencly with SignalR</title>
    <link href="StockTicker.css" rel="stylesheet" />
</head>
<body>
    <h1>SqlTableDependencly with SignalR</h1>
 
    <input type="button" value="测试SignalR" id="btnTest" />
    <div id="stockTable">
        <table border="1">
            <thead style="
                <tr><th>Code</th><th>Name</th><th>Price</th></tr>
            </thead>
            <tbody>
                <tr class="loading"><td colspan="3">loading...</td></tr>
            </tbody>
        </table>
    </div>
 
    <script src="jquery-1.10.2.min.js"></script>
    <script src="jquery.color-2.1.2.min.js"></script>
    <script src="../Scripts/jquery.signalR-2.2.0.js"></script>
    <script src="../signalr/hubs"></script>
    <script src="SignalR.StockTicker.js"></scri
首页 上一页 1 2 3 4 下一页 尾页 2/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇部署Chart应用并使用.net core读.. 下一篇C# windform 使用TreeGridView

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目