程序非常簡單,就是從一個表中取出一個符合要求的數據,如果取到,就把該數據對應的計數加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對象。
應該說,第二種解決辦法更好一點。
文章列表