在 ASP.NET MVC Core(C#) 中执行 Oracle 存储过程 (PL/SQL)
Posted
技术标签:
【中文标题】在 ASP.NET MVC Core(C#) 中执行 Oracle 存储过程 (PL/SQL)【英文标题】:Executing Oracle Stored Procedure (PL/SQL) in ASP.NET MVC Core(C#) 【发布时间】:2021-05-27 00:52:29 【问题描述】:我一直在搜索,但我不完全了解如何通过我的应用程序执行存储过程,然后提交事务。请注意,我已连接到 Oracle 11g 数据库。
看看,这是我的功能,我尝试过这样的事情,但对我来说似乎不正确:
public void CreateRow(Person person)
using SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand("SP_InserNewRow", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@CODE", person.CODE);
cmd.Parameters.AddWithValue("@NAME", person.NAME);
cmd.Parameters.AddWithValue("@LASTNAME", person.LASTNAME);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
这是我的模型 cs 文件:
public class Person
public int CODE get; set;
public string NAME get; set;
public string LASTNAME get; set;
这是我的 Oracle 存储过程:
create or replace PROCEDURE SP_InserNewRow(
CODE IN NUMBER,
NAME IN VARCHAR,
LASTNAME IN VARCHAR) AS
BEGIN
INSERT INTO MyTable(CODE,NAME,LASTNAME) VALUES (CODE, NAME, LASTNAME);
END SP_InserNewRow;
通过MVC执行它的正确方法是什么?
我如何提交交易?
在Oracle11g和Oracle12中尝试执行有什么不同吗?
编辑:
readonly string connectionString = "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxxxxxxxx)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=PROD)));User Id=xxx;Password=xxxx;"
public IEnumerable<Person>GetPersonList
var listPerson = new List<Person>();
using (OracleConnection con = new OracleConnection(connectionString))
OracleCommand cmd = new OracleCommand("select * from myview", con);
cmd.Connection = con;
cmd.InitialLOBFetchSize = 1000;
cmd.CommandType = CommandType.Text;
con.Open();
OracleDataReader dr = cmd.ExecuteReader();
while (dr.Read())
var list = new Person();
list.CODE = Convert.ToInt32(dr["CODE"].ToString());
list.NAME = dr["NAME"].ToString();
list.LASTNAME = dr["LASTNAME"].ToString();
listPerson.Add(list);
con.Close();
return listPerson;
【问题讨论】:
【参考方案1】:我建议你使用 OracleConnection 而不是 SqlConnection
using Oracle.DataAccess;
using Oracle.DataAccess.Client;
public DataTable GetHeader_BySproc(string unit, string office, string receiptno)
using (OracleConnection cn = new OracleConnection(DatabaseHelper.GetConnectionString()))
OracleCommand cmd = new OracleCommand();
cmd.Connection = cn;
cmd.InitialLONGFetchSize = 1000;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@CODE", person.CODE);
cmd.Parameters.AddWithValue("@NAME", person.NAME);
cmd.Parameters.AddWithValue("@LASTNAME", person.LASTNAME);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
还可以通过在 DBMS 中执行来测试您的 SP。
【讨论】:
您好,非常感谢您的回复;我不完全理解两件事? 1)你是如何使用 Oracle.DataAccess;using Oracle.DataAccess.Client; 工作的?你是如何设置你的连接字符串的?你是如何管理 COMMIT 操作的? 1) 假设您使用的是 Visual Studio,您可以从 Nuget 包管理器添加 Oracle DataAccess pkg 并使用这些库。 2) DatabaseHelper.GetConnectionString() 是一个返回我的连接字符串的函数。您可以直接在构造函数new OracleConnection("your string")
中传递您的字符串。虽然建议您使用静态函数。因此,如果您更改连接字符串,则不必查找每个连接并进行更改。您只会在静态函数中进行更改,并且会很好
要提交,您可以像其他查询集一样在存储过程中简单地使用提交子句。您可以在此处通过 COMMIT 语句示例学习语法。 oracle COMMIT
朋友,看看:我已经编辑了我的问题:对吗?
是的,我觉得不错。但是你可以在运行你的代码后说得更好。如果它工作与否以上是关于在 ASP.NET MVC Core(C#) 中执行 Oracle 存储过程 (PL/SQL)的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 C# 在 ASP.NET Core 3.1 MVC 中使用会话变量
ASP.NET Core MVC(C#) 文件上传及后台输出响应Aspose.Words处理后文件
如何在 C# 中将数据发送到 ASP.NET Core MVC 控制器?
在 ASP.NET MVC Core(C#) 中执行 Oracle 存储过程 (PL/SQL)