近期的一個項目是關於不同數據庫同步的操作,考慮到數據的及時性,應用程序的性能,在數據庫鏈接字符串中加入MultipleActiveResultSets;
MultipleActiveResultSets的作用是指定多活動的結果集是否與指定的鏈接相互關聯;類型是bool類型;true代表與指定的鏈接關聯;false代表與指定的鏈接不關聯;默認是false;
舉個例子(以控制台應用程序為例):

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(我用的是這個數據庫)的。
可以看出數據庫建立鏈接多次;
修改以上程序:

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的情況,也就是說重用了第一次打開時所用的鏈接。
數據庫的打開與關閉是很消耗系統的性能,利用這種對鏈接的關聯方式可以減輕系統的負擔。