Npgsql: команда INSERT не вставляет - PullRequest
1 голос
/ 28 июня 2010

Проблема:

NpgsqlCommand.Text: INSERT INTO mytable (id, name) VALUES (: id,: name)
Параметр 1: имя = идентификатор, значение = 42
Параметр 2: имя = имя, значение = "что угодно"

command.ExecuteScalar() не выходит из строя, но новой строки нет. Также нет дублирующегося идентификатора.

Код:

using (var command = connection.CreateCommand()) {
    command.Transaction = transaction;
    command.CommandText = "INSERT INTO mytable (id, name) VALUES (:id, :name)";       

    var idParameter = command.CreateParameter();
    idParameter.Direction = ParameterDirection.Input;
    idParameter.DbType = DbType.Int32;
    idParameter.ParameterName = "id";
    idParameter.Value = 42;
    command.Parameters.Add( idParameter );

    var nameParameter = command.CreateParameter();
    nameParameter.Direction = ParameterDirection.Input;
    nameParameter.DbType = DbType.String;
    nameParameter.ParameterName = "name";
    nameParameter.Value = "whatever";
    command.Parameters.Add( nameParameter );

    command.ExecuteScalar();
}

Код выше не является реальным кодом. Мне пришлось собрать его из нескольких классов DAL, чтобы линеаризовать его ...
Транзакция, конечно, создается до этого кода и фиксируется впоследствии.

Определение таблицы:

CREATE TABLE mytable
(
    "name" character varying NOT NULL,
    id integer NOT NULL,
    CONSTRAINT mytable_pkey PRIMARY KEY (id)
)
WITH (
    OIDS=FALSE
);
ALTER TABLE mytable OWNER TO myuser;

Вопрос (ы):

  • Ху
  • Почему?
  • Что я делаю не так?

Результат:

Всегда проверяйте, зафиксированы ли ваши транзакции, и дважды проверяйте, не закомментирован ли Commit () ...

Ответы [ 2 ]

2 голосов
/ 28 июня 2010

Попробуйте использовать

command.ExecuteNonQuery();

вставка команды. ExecuteScalar ()

1 голос
/ 28 июня 2010

Не забудьте зафиксировать, так как вы используете транзакцию

...