zoukankan      html  css  js  c++  java
  • 另一个 OracleParameterCollection 中已包含 OracleParameter

    出现这个错误的时候,我按照百度来的方法 在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);
                    }
    			}
    		}



  • 相关阅读:
    线程池源码解析
    String与常量池
    spring循环依赖
    ConcurrentHashMap源码解析(JDK8)
    原子类源码分析
    web service和ejb的区别
    RPC
    hashcode()和equals()的区别
    关于json
    Lifecycle of jsf
  • 原文地址:https://www.cnblogs.com/yanergui/p/5624751.html
Copyright © 2011-2022 走看看