OracleParameter 对象已包含在集合中

Posted

技术标签:

【中文标题】OracleParameter 对象已包含在集合中【英文标题】:OracleParameter object is already contained in a collection 【发布时间】:2014-03-20 00:40:11 【问题描述】:

我正在尝试从 c# 代码执行 oracle 存储过程。 我正在尝试将 oracle 参数添加到程序中。但是我在添加时遇到了“”之类的异常。请帮帮我。

代码:

using Oracle.DataAccess.Client;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Activity.Account

    public partial class WebForm1 : System.Web.UI.Page
    
        protected void Page_Load(object sender, EventArgs e)
        
            SuccessLabel.Visible = false;
            FailureLabel.Visible = false;
        

        protected void Create_user(object sender, EventArgs e)
        
            string oradb = "Data Source=OracleServerHost;User ID=scott;password=tiger";
            using (OracleConnection conn = new OracleConnection(oradb))
            
                try
                
                    OracleCommand cmd = new OracleCommand("create_users_372640", conn);
                    cmd.CommandType = CommandType.StoredProcedure;
                    OracleParameter p1 = new OracleParameter("u_user_id", UserIDTextBox.Text);
                    OracleParameter p2 = new OracleParameter("u_First", FirstNameTextBox.Text);
                    OracleParameter p3 = new OracleParameter("u_Last", LastNameTextBox.Text);
                    OracleParameter p4 = new OracleParameter("u_Email", EmailIDTextBox.Text);
                    OracleParameter p5 = new OracleParameter("u_password", PasswordTextBox.Text);
                    cmd.Parameters.Add(p1);
                    cmd.Parameters.Add(p2);
                    cmd.Parameters.Add(p3);
                    cmd.Parameters.Add(p4);
                    cmd.Parameters.Add(p5);
                    OracleCommand cmd_chk = new OracleCommand("check_user_372640", conn);
                    cmd_chk.CommandType = CommandType.StoredProcedure;
                    cmd_chk.Parameters.Add(p1);
                    conn.Open();
                    OracleDataReader rd = cmd_chk.ExecuteReader();
                    if (rd.HasRows)
                    
                        rd.Read();
                        SuccessLabel.Visible = true;
                        FailureLabel.Visible = false;
                    
                    else
                    
                        SuccessLabel.Visible = false;
                        FailureLabel.Visible = true;
                    
                catch(Exception)
                    Console.WriteLine("SQL Exception Occured");
                
            

        
    

【问题讨论】:

【参考方案1】:

您不能在多个集合中拥有一个参数对象。 这是你的问题:

cmd.Parameters.Add(p1);
cmd_chk.Parameters.Add(p1);

【讨论】:

你有什么建议?【参考方案2】:

我有同样的问题,尝试使用 Clone() 函数。

cmd.Parameters.Add(p1.Clone());

它解决了我的问题。

【讨论】:

以上是关于OracleParameter 对象已包含在集合中的主要内容,如果未能解决你的问题,请参考以下文章

无法将“System.String”类型的对象转换为 C# 中的“Oracle.DataAccess.Client.OracleParameter”类型

OracleParameter 和 DBNull.Value

OracleParameter.Size 有啥影响?

PL/SQL NVL 和 OracleParameter 在 C# 中不起作用

OracleParameter 和 IN 子句

c# OracleParameter 抛出 ORA-06502