天天看點

另一個 OleDbParameterCollection 中已包含 OleDbParameter 錯誤分析及解決辦法

程式非常簡單,就是從一個表中取出一個符合要求的資料,如果取到,就把該資料對應的計數加1。

也就是執行不同的兩個SQL語句操作同一個表,并且這兩個SQL的參數是一樣的。在一個函數裡完成這個調用。

執行第二個SQL調用時,老是提示“另一個 OleDbParameterCollection 中已包含 OleDbParameter。”

非常奇怪,兩個SQL語句正确,參數設定正确,分開執行正确,一起執行就出錯,百思不得其解。

在網上搜尋,得到第一個解決辦法:

foreach (OleDbParameter Param in ParamList) 

    //cmd.Parameters.Add(Param); 

    cmd.Parameters.AddWithValue(Param.ParameterName, Param.Value); 

}

把上面注釋語句更改一下,沒有異常了。雖然問題沒有了,可是覺得很奇怪。繼續搜尋,

看到一個牛人的分析:OleDbParameter還有parent的。

第二個解決辦法:

對上一個使用了 OleDbParameter 的 OleDbCommand,在使用完成之後,要

cmd.Parameters.Clear();

具體的分析過程就不說了。

學到最重要的一招,就是用Reflector去分析.net的源碼。

再對比上面兩種解決辦法,

Parameters.Add 應該是傳遞的引用,OleDbCommand在執行過程中,更改了OleDbParameter的成員值,是以,在下一個調用OleDbParameter的OleDbCommand中,執行出錯。

Parameters.AddWithValue 應該是内部重新生成一個OleDbParameter對象。

應該說,第二種解決辦法更好一點。

本文轉自 夢在旅途 部落格園部落格,原文連結: http://www.cnblogs.com/zuowj/p/3476119.html ,如需轉載請自行聯系原作者