出現這個錯誤的時候,我按照百度來的方法 在finally里面加cmd.Parameters.Clear(); 在
foreach (OracleParameter parm in cmdParms) { cmd.Parameters.Add(parm); }
前面加cmd.Parameters.Clear(); 都不管用 后來 發現又找到一種方法 這回管用了:
OracleParameter pp = (OracleParameter)((ICloneable)parm).Clone(); cmd.Parameters.Add(pp);
/// <summary> /// 執行查詢語句,返回DataSet /// </summary> /// <param name="SQLString">查詢語句</param> /// <returns>DataSet</returns> public static DataSet Query(string SQLString,params OracleParameter[] cmdParms) { using (OracleConnection connection = new OracleConnection(connectionString)) { using (OracleCommand cmd = new OracleCommand()) { PrepareCommand(cmd, connection, null, SQLString, cmdParms); using (OracleDataAdapter da = new OracleDataAdapter(cmd)) { DataSet ds = new DataSet(); try { da.Fill(ds, "ds"); cmd.Parameters.Clear(); } catch (System.Data.OracleClient.OracleException ex) { throw new Exception(ex.Message); } finally { cmd.Parameters.Clear(); } return ds; } } } }
private static void PrepareCommand(OracleCommand cmd,OracleConnection conn,OracleTransaction trans, string cmdText, OracleParameter[] cmdParms) { if (conn.State != ConnectionState.Open) conn.Open(); cmd.Connection = conn; cmd.CommandText = cmdText; if (trans != null) cmd.Transaction = trans; cmd.CommandType = CommandType.Text;//cmdType; if (cmdParms != null) { cmd.Parameters.Clear(); foreach (OracleParameter parm in cmdParms) { OracleParameter pp = (OracleParameter)((ICloneable)parm).Clone(); cmd.Parameters.Add(pp); } } }