【发布时间】:2020-07-12 14:23:39
【问题描述】:
我有我的 c# 对象
public class Person
{
public string Name { get;set; }
public string Surname{ get;set; }
public string Phone { get;set; }
public string Address { get;set; }
// More properties here
}
所以,我以这种方式将它传递给 oracle 存储过程
var con = new OracleConnection("connection string");
var com = con.CreateCommand("create_user");
com.Parameters.Add("name", OracleDbType.Varchar2, Name , ParameterDirection.Input);
com.Parameters.Add("surname", OracleDbType.Varchar2, Surname, ParameterDirection.Input);
com.Parameters.Add("phone", OracleDbType.Varchar2, Phone , ParameterDirection.Input);
// More adds here
我的预言机程序
CREATE OR REPLACE PROCEDURE Person(
name IN Person.name%TYPE,
surname IN Person.surname%TYPE,
phone IN Person.phone%TYPE,
address IN Person.address%TYPE
-- more parameters
)
IS
BEGIN
INSERT INTO Person ("name", "surname", "phone", "address")
VALUES (name, surname,phone, address);
COMMIT;
END;
/
问题是:还有其他方法可以将对象传递给oracle吗?因为我认为创建具有 10 多个输入参数的过程有点奇怪。还是更好的使用 xml(clob) 通信?
【问题讨论】:
-
有更好的方法,但它们仍然涉及独立传递字段参数。
-
当您可以直接运行
INSERT查询时,为什么还要创建一个过程来运行INSERT查询? -
如果您不想在procedure中输入10+个参数,您可以在oracle中创建UDT并使用它。但是从 C# 开始,您仍然需要映射所有属性。您可以查看此link 以供参考。
-
@Rajeev 谢谢,它有效。如果您将答案写在答案块中,我会将其标记为解决方案
标签: c#