【发布时间】: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;
}
【问题讨论】:
标签: c# sql asp.net-mvc plsql oracle11g