轉(zhuǎn)載自:http://blog.csdn.net/zlt982001/article/details/433412
最近在 CSDN 上回答了好幾個(gè)網(wǎng)友大致相同的問題
http://community.csdn.net/Expert/TopicView.asp?id=4131244
http://community.csdn.net/Expert/TopicView.asp?id=4156955
大致都是問:為什么沒有返回?cái)?shù)據(jù)集或?qū)⒂涗浖x給表格控件出錯(cuò)
產(chǎn)生問題的原因大致有幾個(gè)
1。不清楚 ADO.Connection.Execute 的返回機(jī)制,所有使用該方法返回的記錄集都是只讀,僅向前游標(biāo)的
所以賦給一些表格控件會(huì)出錯(cuò)。
2。在存儲(chǔ)過程內(nèi)沒有使用 Set NCOunt ON 或使用不當(dāng)。
Set noCount On 的作用是使SQL server 不返回SQL 語句操作的影響記錄數(shù),
大多數(shù) SQL 語句都會(huì)產(chǎn)生操作記錄數(shù),如:Select,delete,update,insert ........
而ADO 在會(huì)將每一個(gè)返回的 操作記錄數(shù) 都當(dāng)成一個(gè)記錄集,如果超過一個(gè)以上的 操作記錄數(shù)
就會(huì)返回 記錄集集合
而 ADO 本身是支持多個(gè)記錄集的可以用過 Rs.NextRecordSet 來獲得一個(gè)記錄集集合中的任意記錄集
所以你使用 RS 可能得到的只是 某個(gè)語句的操作記錄數(shù),而非真正想要返回的記錄集
解決的方法: 將 Set NoCount On 放在存儲(chǔ)過程最前面
這樣是有好處的,它使 SQL Server 不至于每個(gè)語句都發(fā)送給客戶端操作的影響,減少了網(wǎng)絡(luò)通訊