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