Как передать объект c# в Oracle? - PullRequest
0 голосов
/ 12 июля 2020

У меня есть объект 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

моя oracle процедура

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) связь?

Ответы [ 2 ]

0 голосов
/ 22 июля 2020

Если вам не нужны более 10 входных параметров в процедуре, вы можете создать UDT в oracle и использовать его.

Но начиная с C#, вам все равно нужно сопоставить все свойства.

Вы можете проверить эту ссылку для справки

0 голосов
/ 12 июля 2020

Используя Dapper.Contrib , вы можете просто написать это как

connection.Insert(Person);

Dapper отобразит все ваши параметры за вас.

Конечно, это только работает, если вы хотите использовать go хранимые процедуры. Если вы настаиваете на хранимых процедурах, вам все равно придется заполнять каждый параметр индивидуально, даже с Dapper.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...