我正在尝试从c#代码执行oracle存储过程。 我正在尝试将oracle参数添加到过程中。但是我在添加时遇到了“OracleParameter对象已经包含在集合中”的异常。请帮帮我。
代码:
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");
}
}
}
}
}
答案 0 :(得分:2)
您不能在多个集合中拥有参数对象。 这是你的问题:
cmd.Parameters.Add(p1);
cmd_chk.Parameters.Add(p1);
答案 1 :(得分:1)
我有同样的问题,尝试使用Clone()函数。
cmd.Parameters.Add(p1.Clone());
它解决了我的问题。