Запрос не запускается из npgsql, но работает на postgresql pgAdmin

1

У меня проблема с простым запросом на вставку из моего приложения С# в базу данных Postrges.

Это функция, которая строит запрос:

string push = "INSERT INTO \"Tasks\"( \"TName\", \"Desc\", \"TType\", \"DCreated\", \"DEnd\") VALUES (\'" + this.Name + "\',\'" + this.Descr + "\'," + this.Type + ",\'" + this.StartDate + "\', \'" + this.EndDate + "\');";
                GenericDbClass.ExecutePush(push);

И это строка, которая передается в БД:

INSERT INTO "Tasks"( "TName", "Desc", "TType", "DCreated", "DEnd") VALUES ('dddddd','dddddddddddd',3,'13.04.2015 17:00', '24.04.2015 16:42');

Если я скопирую строку и запустил ее внутри pgAdmin, она будет работать прямо на летучей мыши, но отсюда она ничего не делает - никаких исключений, ошибок, ничто в журналах, как если бы она просто не дошла до сервера.

Кроме того, это метод push:

public static void ExecutePush(string sql)
    {
        try
        {
            NpgsqlConnection conn = new NpgsqlConnection(GenericDbClass.GetDbConnString());
            conn.Open();
            NpgsqlDataAdapter da = new NpgsqlDataAdapter(sql, conn);
            conn.Close();
        }

        catch (Exception msg)
        {
            MessageBox.Show(msg.ToString());
            throw;
        }
    }

Изменение: Это рабочее решение, которое я нашел

public static void ExecutePush(string sql)
    {
        try
        {
            NpgsqlConnection conn = new NpgsqlConnection(GenericDbClass.GetDbConnString());
            conn.Open();
            NpgsqlCommand nc = new NpgsqlCommand(sql, conn);
            nc.ExecuteNonQuery();
            conn.Close();
        }

        catch (Exception msg)
        {
            MessageBox.Show(msg.ToString());
            throw;
        }
    }
  • 1
    Я не могу помочь вам с вашей реальной проблемой, но я буду осторожен с внедрением SQL при создании запроса. Рассмотрите возможность использования параметризованного запроса.
  • 0
    Я осознаю риск - это просто общее упражнение, которое я должен завершить, и оно не будет в реальном развертывании. В любом случае, спасибо :)
Теги:
npgsql

1 ответ

2
Лучший ответ
NpgsqlDataAdapter da = new NpgsqlDataAdapter(sql, conn);

Средства "Пожалуйста, создайте адаптер данных, который использует INSERT SQL, переданный как sql для выбора". Это не имеет большого смысла, и тогда вы ничего не делаете с этим.

conn.CreateCommand(sql).ExecuteNonQuery();

Это похоже на то, что вы хотите.

  • 0
    Спасибо, с небольшим количеством Google-фу, это то, что мне было нужно.
  • 0
    Извините, я сделал довольно глупую ошибку, поэтому моего ответа было недостаточно без гугл-фу. Кстати, стоит прочитать документацию по интерфейсам System.Data, поскольку Npgsql реализует это, и, следовательно, знание этих интерфейсов является знанием Npgsql, но также применимо и к другим поставщикам БД.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню