gpt4 book ai didi

c# - 在 .NET 中,如何执行此 Oracle PL/SQL 程序?

转载 作者:行者123 更新时间:2023-11-30 15:07:52 25 4
gpt4 key购买 nike

我的程序在这里声明:

create or replace
PACKAGE MYPKG
IS
PROCEDURE MYPROCEDURE(
sNom IN VARCHAR2,
sValeur OUT VARCHAR2,
sCommentaire OUT VARCHAR2,
sRetour OUT VARCHAR2,
sMsgRetour OUT VARCHAR2);
END;

使用 SQL Developer 执行正常。

我尝试在 C# 中执行此过程:

OracleCommand cmd = new OracleCommand("MYPKG.MYPROCEDURE", OraCon);
cmd.CommandType = CommandType.StoredProcedure;
OracleParameter name = new OracleParameter("sNom", OracleType.VarChar);
name.Value = "CG";
cmd.Parameters.Add(name);
OracleParameter valeur = new OracleParameter("sValeur", OracleType.VarChar);
cmd.Parameters.Add(valeur);
OracleParameter commentaire = new OracleParameter("sCommentaire", OracleType.VarChar);
cmd.Parameters.Add(commentaire);
OracleParameter retour = new OracleParameter("sRetour", OracleType.VarChar);
cmd.Parameters.Add(retour);
OracleParameter msgRetour = new OracleParameter("sMsgRetour", OracleType.VarChar);
cmd.Parameters.Add(msgRetour);

using (OracleDataReader row = cmd.ExecuteReader())
{
while (row.Read())
{
Console.WriteLine(row.GetValue(0));
}
}

我遇到错误“参数错误”。如何执行 PL/SQL 程序?

最佳答案

这就是我的处理方式。
注意:我已经编译了这段代码,但我没有针对数据库对其进行测试,尽管我有很多类似的代码都可以正常工作。

另请注意:您不会取回集合,因此您真的应该使用 OraCmd.ExecuteNonQuery 而不是 OraCmd.ExecuteReader

using System.Configuration;
using System.Data;
using Oracle.DataAccess.Client;


namespace Testing
{
public class OracleCommandTest
{

string m_strConnectionsString = string.Empty;

//Constructor
public OracleCommandTest()
{
//Get the connection string from the app.config
m_strConnectionsString = ConfigurationManager.ConnectionStrings["ConnectionStringName"].ConnectionString;

//if it is a web app, then use this call instead
//m_strConnectionsString = WebConfigurationManager.ConnectionStrings["ConnectionStringName"].ConnectionString;

}



public void getData(string sNom, out string sValeur, out string sCommentaire, out string sRetour, out string sMsgRetour)
{
OracleConnection ora_conn = new OracleConnection(m_strConnectionsString);

try
{
ora_conn.Open();

/*********************Oracle Command**********************************************************************/
OracleCommand ora_cmd = new OracleCommand("MYPKG.MYPROCEDURE", ora_conn);
ora_cmd.BindByName = true;
ora_cmd.CommandType = CommandType.StoredProcedure;


ora_cmd.Parameters.Add("sNom", OracleDbType.Varchar2, sNom, ParameterDirection.Input);
ora_cmd.Parameters.Add("sValeur", OracleDbType.Varchar2, ParameterDirection.Output);
ora_cmd.Parameters.Add("sCommentaire", OracleDbType.Varchar2, ParameterDirection.Output);
ora_cmd.Parameters.Add("sRetour", OracleDbType.Varchar2, ParameterDirection.Output);
ora_cmd.Parameters.Add("sMsgRetour", OracleDbType.Varchar2, ParameterDirection.Output);
/*********************Oracle Command**********************************************************************/

ora_cmd.ExecuteNonQuery();

//Now get the values output by the stored procedure
sValeur = ora_cmd.Parameters["sValeur"].Value.ToString();
sCommentaire = ora_cmd.Parameters["sCommentaire"].Value.ToString();
sRetour = ora_cmd.Parameters["sRetour"].Value.ToString();
sMsgRetour = ora_cmd.Parameters["sMsgRetour"].Value.ToString();




}

//catch (Exception ex)
//{
// WebErrorHandling.WriteToEventLog("PRVEquipment_DAL.getPRVEquipment", ex);

//}
finally
{
if (ora_conn.State == ConnectionState.Open)
{
ora_conn.Close();
}
}

}


}


}

希望对你有帮助
哈维萨瑟

关于c# - 在 .NET 中,如何执行此 Oracle PL/SQL 程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6199103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com