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