1

問題:

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() がコメントアウトされていないかどうかを再確認してください...

4

2 に答える 2

2

使ってみて

command.ExecuteNonQuery();

command.ExecuteScalar() の insetad

于 2010-06-28T13:23:47.877 に答える
1

トランザクションを使用しているため、コミットを忘れないでください

于 2010-06-28T13:27:25.933 に答える