近期的一个项目是关于不同数据库同步的操作,考虑到数据的及时性,应用程序的性能,在数据库链接字符串中加入MultipleActiveResultSets;
MultipleActiveResultSets的作用是指定多活动的结果集是否与指定的链接相互关联;类型是bool类型;true代表与指定的链接关联;false代表与指定的链接不关联;默认是false;
举个例子(以控制台应用程序为例):
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
SqlConnectionStringBuilder sb = new SqlConnectionStringBuilder(); sb.DataSource = "."; sb.InitialCatalog = "Neo_OA"; sb.IntegratedSecurity = true; using (SqlConnection con = new SqlConnection(sb.ConnectionString)) { string sql = "select count(0) from userinfo"; SqlCommand cmd = new SqlCommand(sql, con); con.Open(); object ob = cmd.ExecuteScalar(); if (ob == null) { Console.WriteLine(0); } else { Console.WriteLine(Convert.ToInt32(ob)); } } Console.ReadLine();
利用sql server自带的存储过程sp_who来监测我们的进程信息;
打开我们dug文件下面的exe文件多个,在sql server中执行存储过程sp_who,此时我们会发现在显示列表中,出现多项dbName 是NEO_OA(我用的是这个数据库)的。
可以看出数据库建立链接多次;
修改以上程序:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
SqlConnectionStringBuilder sb = new SqlConnectionStringBuilder(); sb.DataSource = "."; sb.InitialCatalog = "Neo_OA"; sb.IntegratedSecurity = true; sb.MultipleActiveResultSets = true; using (SqlConnection con = new SqlConnection(sb.ConnectionString)) { string sql = "select count(0) from userinfo"; SqlCommand cmd = new SqlCommand(sql, con); con.Open(); object ob = cmd.ExecuteScalar(); if (ob == null) { Console.WriteLine(0); } else { Console.WriteLine(Convert.ToInt32(ob)); } } Console.ReadLine();
仍然按照钢材方式,发现此时没有出现多项是DBNAME是NEO_OA的情况,也就是说重用了第一次打开时所用的链接。
数据库的打开与关闭是很消耗系统的性能,利用这种对链接的关联方式可以减轻系统的负担。
怀揣着一点点梦想的年轻人
相信技术和创新的力量
喜欢快速反应的工作节奏
相信技术和创新的力量
喜欢快速反应的工作节奏