Проблема:
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 () ...