Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2017, 14:04   #1
Asew
Пользователь
 
Регистрация: 29.08.2017
Сообщений: 25
Смех Запись в БД PostgreSql

как правильно передать значения в БД Postgres?

Пишу:
Код:
public static void MY_Export(string A, string date, , string MYOwn)
        {
            String connectionString = "Server=localhost;Port=5432;User=postgres;Password=postgres;Database=postgres;";
 
            NpgsqlConnection npgSqlConnection = new NpgsqlConnection(connectionString);
            npgSqlConnection.Open(); 
 
         
            NpgsqlCommand npgSqlCommand = new NpgsqlCommand("my_procedure_in_postgres", npgSqlConnection);
 
            npgSqlCommand.CommandType = CommandType.StoredProcedure;
            npgSqlCommand.Parameters.AddWithValue("a", A);
            npgSqlCommand.Parameters.AddWithValue("b", date);
            npgSqlCommand.Parameters.AddWithValue("Own", MYOwn);
Сама процедура в PostgreSql работает если ее выполнить следующим образом:
Код:
SELECT my_procedure_in_postgres ('a',to_date('2010.10.10.10','YYYY.MM.DD.HH24')), 'test')

Последний раз редактировалось Asew; 04.12.2017 в 14:20.
Asew вне форума Ответить с цитированием
Старый 04.12.2017, 15:23   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Пробуйте так:
Код:
            NpgsqlCommand npgSqlCommand = new NpgsqlCommand("my_procedure_in_postgres (@a,@b,@Own)", npgSqlConnection);
 
            npgSqlCommand.CommandType = CommandType.StoredProcedure;
            npgSqlCommand.Parameters.AddWithValue("@a", A);
            npgSqlCommand.Parameters.AddWithValue("@b", date);
            npgSqlCommand.Parameters.AddWithValue("@Own", MYOwn);
pu4koff вне форума Ответить с цитированием
Старый 04.12.2017, 15:31   #3
Asew
Пользователь
 
Регистрация: 29.08.2017
Сообщений: 25
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Пробуйте так:
Код:
            NpgsqlCommand npgSqlCommand = new NpgsqlCommand("my_procedure_in_postgres (@a,@b,@Own)", npgSqlConnection);
 
            npgSqlCommand.CommandType = CommandType.StoredProcedure;
            npgSqlCommand.Parameters.AddWithValue("@a", A);
            npgSqlCommand.Parameters.AddWithValue("@b", date);
            npgSqlCommand.Parameters.AddWithValue("@Own", MYOwn);
Я уже так пробовал, думаю вероятно проблема в том , что в процедуре PostgreSQL используются ковычки:

т.е.

должно быть так : 'a', 'b',to_date('own','YYYY.MM.DD.HH24' )

У меня видимо передается без ковычек, а дата string, ее надо как-то ввинтить в конструкцию to_date и еще формат запихнуть. Вот как это сделать не очень понятно(
Asew вне форума Ответить с цитированием
Старый 04.12.2017, 15:52   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

кавычки к строкам автоматом должны добавляться. MYOwn - это переменная в формате даты или строка? Если это DateTime, то никакие to_date не нужны
pu4koff вне форума Ответить с цитированием
Старый 04.12.2017, 15:54   #5
Asew
Пользователь
 
Регистрация: 29.08.2017
Сообщений: 25
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
кавычки к строкам автоматом должны добавляться. MYOwn - это переменная в формате даты или строка? Если это DateTime, то никакие to_date не нужны
мой косяк в предыдущем посте MYOwn - это строка.

b - это дата в формате строки. Мне надо как-то ее в to_date передать
Asew вне форума Ответить с цитированием
Старый 04.12.2017, 16:07   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Это называется "параметризованный запрос". Фишка в том, что параметры нужно передавать того же типа, какой принимает процедура. Ждёт процедура дату - передавайте как дату, ждёт число - передавайте int/long и т.п. В этом случае провайдер переведёт в формат СУБД и всё отработает как надо.
Передавать дату как строку вредная привычка, т.к. завтра у СУБД сменятся настройки локали (уже будет работать со строками в нашем формате дд.мм.гггг) и всё поломается.
pu4koff вне форума Ответить с цитированием
Старый 04.12.2017, 16:14   #7
Asew
Пользователь
 
Регистрация: 29.08.2017
Сообщений: 25
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Это называется "параметризованный запрос". Фишка в том, что параметры нужно передавать того же типа, какой принимает процедура. Ждёт процедура дату - передавайте как дату, ждёт число - передавайте int/long и т.п. В этом случае провайдер переведёт в формат СУБД и всё отработает как надо.
Передавать дату как строку вредная привычка, т.к. завтра у СУБД сменятся настройки локали (уже будет работать со строками в нашем формате дд.мм.гггг) и всё поломается.
Даже если написать через дату :


Код:
public static void MY_Export(string A, datetime date,  string MYOwn)
        {
            String connectionString = "Server=localhost;Port=5432;User=postgres;Password=postgres;Database=postgres;";
 
            NpgsqlConnection npgSqlConnection = new NpgsqlConnection(connectionString);
            npgSqlConnection.Open(); 
 
         
            NpgsqlCommand npgSqlCommand = new NpgsqlCommand("my_procedure_in_postgres", npgSqlConnection);
 
            npgSqlCommand.CommandType = CommandType.StoredProcedure;
            npgSqlCommand.Parameters.AddWithValue("a", A);
            npgSqlCommand.Parameters.AddWithValue("b", date);
            npgSqlCommand.Parameters.AddWithValue("Own", MYOwn);
не передается строка....
Asew вне форума Ответить с цитированием
Старый 04.12.2017, 16:37   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Asew Посмотреть сообщение
не передается строка....
пруф?

и ещё, Вы свой код сравните с примером, который Вам дали в пост #2

Последний раз редактировалось Serge_Bliznykov; 04.12.2017 в 16:41.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.12.2017, 16:47   #9
Asew
Пользователь
 
Регистрация: 29.08.2017
Сообщений: 25
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
пруф?

и ещё, Вы свой код сравните с примером, который Вам дали в пост #2
я запускаю в PostgreSql

SELECT my_procedure_in_postgres ('a',to_date('2010.10.10.10','YYYY. MM.DD.HH24')), 'test') - данные заходят , по описанию процедуры они вставляются в некоторую таблицу..

код, который предложен в посте номер 2 не робит , также как и мой. Ничего не отправляется потому что в таблице я не вижу ничего (

Если есть вариант как увидеть в консоли что вставляется в процедуру то я буду рад это увидеть, чтоб понять что же передается, потому что я лично увидеть не могу что вставляется в C# по факту в процедуру.
Asew вне форума Ответить с цитированием
Старый 04.12.2017, 17:38   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Asew Посмотреть сообщение
код, который предложен в посте номер 2 не робит , также как и мой.
покажите ваш код. Вы npgSqlCommand выполнить не забываете?


Цитата:
Сообщение от Asew Посмотреть сообщение
Ничего не отправляется потому что в таблице я не вижу ничего (
в какой таблице Вы ничего не видите?

собственно
Цитата:
Сообщение от Asew Посмотреть сообщение
SELECT my_procedure_in_postgres ('a',to_date('2010.10.10.10','YYYY. MM.DD.HH24')), 'test')
должен что-то возвращать, как и любая команда select
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массивы - Спроектировать и разработать классы Запись в блокноте и Блокнот. Реализовать методы: Добавить запись, Удалить запись, Редактировать запись SashaRozhkov Помощь студентам 0 05.08.2017 19:16
PostgreSQL 5cek БД в Delphi 17 08.04.2014 12:45
Делфи и Postgresql maximus116 БД в Delphi 2 28.08.2012 11:53
Запись данных в таблицу PostgreSQL nec117 PHP 8 07.08.2010 13:18
Qt+PostgreSQL almareta Qt и кроссплатформенное программирование С/С++ 0 06.08.2010 10:30