1、當(dāng)SqlDataReader沒(méi)有關(guān)閉之前,數(shù)據(jù)庫(kù)連接會(huì)一直保持open狀態(tài),所以在使用SqlDataReader時(shí),使用完畢應(yīng)該馬上調(diào)用SqlDataReader.Close()關(guān)閉它。
2、一個(gè)連接只能被一個(gè)SqlDataReader使用,這也是為什么要盡早關(guān)閉SqlDataReader的原因。
3、使用完SqlDataReader后,你可以在程序中顯示的調(diào)用數(shù)據(jù)庫(kù)連接對(duì)象的Close方法關(guān)閉連接,也可以在調(diào)用Command對(duì)象的ExecuteReader方法時(shí)傳遞CommandBehavior.CloseConnection 這個(gè)枚舉變量,這樣在調(diào)用SqlDataReader的Close方法時(shí)會(huì)自動(dòng)關(guān)閉數(shù)據(jù)庫(kù)連接。
4、使用SqlDataReader時(shí)盡量使用和數(shù)據(jù)庫(kù)字段類型匹配的方法來(lái)取得相應(yīng)的值,比如對(duì)于整形的字段使用GetInt32,對(duì)字符類型的字段使用GetString。這樣會(huì)減少因?yàn)轭愋筒灰恢露~外增加的類型轉(zhuǎn)換操作。
5、使用SqlDataReader獲取多條記錄時(shí),如果沒(méi)有訪問(wèn)到取出記錄的末尾時(shí)想要關(guān)閉SqlDataReader,應(yīng)該先調(diào)用Command對(duì)象的Cancel方法,然后再調(diào)用SqlDataReader的Close方法。Command對(duì)象的Cancel方法使得數(shù)據(jù)庫(kù)不再把SqlDataReader中未訪問(wèn)的數(shù)據(jù)發(fā)送到調(diào)用端,如果不調(diào)用此方法直接關(guān)閉SqlDataReader,數(shù)據(jù)庫(kù)會(huì)發(fā)送和SqlDataReader未訪問(wèn)數(shù)據(jù)等長(zhǎng)的空數(shù)據(jù)流到調(diào)用端。
6、如果想通過(guò)SqlCommand的ExecuteReader方法獲取存儲(chǔ)過(guò)程的返回值或者輸出參數(shù),必須先調(diào)用SqlDataReader的Close方法后,才能獲取輸出參數(shù)的值或者返回值。
7、如果使用SqlDataReader只返回一條記錄,那么在調(diào)用Command的ExecuteReader方法時(shí),指定
CommandBehavior.SingleRow參數(shù),這個(gè)參數(shù)的是否使用對(duì)SQL Server .NET Data Provider沒(méi)有什么影響,但是當(dāng)你使用OLE DB .NET Data Provider時(shí),指定這個(gè)參數(shù)后,DataPrivider內(nèi)部將使用IRow接口,而不是使用相對(duì)來(lái)說(shuō)耗費(fèi)資源的IRowSet接口。
新聞熱點(diǎn)
疑難解答
圖片精選