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