近期的一個項目是關於不同資料庫同步的操作,考慮到資料的及時性,應用程式的效能,在資料庫連結字串中加入MultipleActiveResultSets;
MultipleActiveResultSets的作用是指定多活動的結果集是否與指定的連結相互關聯;類型是bool類型;true代表與指定的連結關聯;false代表與指定的連結不關聯;預設是false;
舉個例子(以控制台應用程式為例):
View Code
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(我用的是這個資料庫)的。
可以看出資料庫建立連結多次;
修改以上程式:
View Code
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的情況,也就是說重用了第一次開啟時所用的連結。
資料庫的開啟與關閉是很消耗系統的效能,利用這種對連結的關聯方式可以減輕系統的負擔。