文章出處

程序非常簡單,就是從一個表中取出一個符合要求的數據,如果取到,就把該數據對應的計數加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對象。

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


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()