powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Передать в функцию массив типов (на C#)
6 сообщений из 6, страница 1 из 1
Передать в функцию массив типов (на C#)
    #39315487
Петровичъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть функция в БД
FUNCTION "Customers"."CustomerBalance_Upd"(_data "Customers"."CustomerBalance"[])

вызывается, например, так:
"Customers"."CustomerBalance_Upd"(ARRAY[
[row (15,25,11,3,33)::"Customers"."CustomerBalance"]
,[row (16,26,11,555,33)::"Customers"."CustomerBalance"]
,[row (17,31,11,3,33)::"Customers"."CustomerBalance"]]);



Как мне сделать такой запрос на C#?
NpgsqlCommand command = new NpgsqlCommand();
command.Connection = _connection;
command.CommandType = System.Data.CommandType.StoredProcedure;
command.CommandText = @"""Customers"".""CustomerBalance_Upd""";
var par = command.Parameters.Add("_data", NpgsqlTypes.NpgsqlDbType.
?????????
????????????

Массив сишных структур(классов) не катит.

Спасибо.
...
Рейтинг: 0 / 0
Передать в функцию массив типов (на C#)
    #39315512
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Типа такого, я передаю массив гуидов:

Guid?[] parGuids = new Guid?[16];
parGuids[0] = Guid.NewGuid();
// etc.
NpgsqlParameter paramIds = new NpgsqlParameter(@"par_ids", NpgsqlDbType.Array | NpgsqlDbType.Uuid);
...
Рейтинг: 0 / 0
Передать в функцию массив типов (на C#)
    #39315522
Петровичъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С этим проблем бы не было. Тока вместо гуидов (предопределенных типов) надо тип, определенный пользователем:
CREATE TYPE "Customers"."CustomerBalance_Type"
...
Рейтинг: 0 / 0
Передать в функцию массив типов (на C#)
    #39315525
Петровичъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пардон, старая версия.

Тип, в общем, определенный пользователем, тока неявно созданный на основе таблицы
"Customers"."CustomerBalance"
...
Рейтинг: 0 / 0
Передать в функцию массив типов (на C#)
    #39315563
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПетровичъПардон, старая версия.

Тип, в общем, определенный пользователем, тока неявно созданный на основе таблицы
"Customers"."CustomerBalance"

Я меня так:
1. тип создан явно в базе: my_type
2. повторён в коде(! - см. имена):

Код: c#
1.
2.
3.
4.
public class MyType
{
    
}


3. в коде мепнут на коннекции

Код: c#
1.
2.
3.
4.
                NpgsqlConnection.MapCompositeGlobally<MyType>();
                command = new NpgsqlCommand();
                command.CommandType = CommandType.StoredProcedure;
...
...
Рейтинг: 0 / 0
Передать в функцию массив типов (на C#)
    #39315996
Петровичъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ролг Хупин, да, получилось.
Несколько дополнений.
1. При создании типа в приложении, необходимо точно повторять названия полей из БД, соблюдая регистр:

using NpgsqlTypes;
...........

public class CustomerBalanceType
{
[PgName("balance")]
public decimal balance { get; set; }

2. Привязку делать одни раз в конструкторе:

NpgsqlConnection.MapCompositeGlobally<CustomerBalanceType>();


3. Параметр задавать через AddWithValue:

public void SaveBalanceData(CustomerBalanceType[] balanceData)
{...
command.Parameters.AddWithValue("_data", balanceData);
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Передать в функцию массив типов (на C#)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]