Npgsql:INSERT命令不插入

时间:2010-06-28 13:19:03

标签: c# .net database c#-3.0 npgsql

问题:

NpgsqlCommand.Text:INSERT INTO mytable(id,name)VALUES(:id,:name)
参数1:name = id,value = 42
参数2:name = name,value =“whatever”

command.ExecuteScalar()不会失败,但没有新行。没有重复的ID。

守则:

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 个答案:

答案 0 :(得分:2)

尝试使用

command.ExecuteNonQuery();

而不是command.ExecuteScalar()

答案 1 :(得分:1)

因为您正在使用交易

,所以不要忘记提交