2

テーブルがあります。これはテーブルのスクリプトです:-

CREATE TABLE news
(
  news_id bigint NOT NULL DEFAULT nextval('news_seq'::regclass),
  title character varying(1024),
  description character varying(2024),
  CONSTRAINT pk_news_newsid PRIMARY KEY (news_id)  
)
WITH (
  OIDS=FALSE
);
ALTER TABLE news OWNER TO viewer;

news_idここで、テーブルに新しいレコードを挿入するときに自動生成を取得したいと考えて います。

これは、ニュースを挿入するための C# 関数です:-

 public Int64 AddNews(News newNews)
    {
        string query = string.Empty;
        try
        {
            string dateFormat = ConfigurationManager.AppSettings["DateFormat"];
            NpgsqlParameter[] parm = new NpgsqlParameter[2];
            parm[0] = new NpgsqlParameter("title", newNews.NewsTitle);
            parm[1] = new NpgsqlParameter("des", newNews.NewsDescription);

            query = @" INSERT INTO   news(title, description)
                            VALUES   (:title, :des) 
                         Returning   news_id";

            int id=NpgSqlHelper.ExecuteNonQuery(connectionString, CommandType.Text, query, parm);

            return id;
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
    }

On executing this function I always get the -1 value

前もって感謝します

pgAdmin で次のクエリを実行すると、正しい結果が得られます。

INSERT INTO news(title, description)
    VALUES ('title','description')
    Returning news_id
4

2 に答える 2

3

NpgsqlCommand.ExecuteScalarまたは使用している API に相当するものを試しましたか?

于 2013-01-25T12:04:39.453 に答える
1

私が見る2つの可能性:

1) -1 の値は、ロールバック状況に陥っていることを示します。関数を実行するときは、テーブルを確認してください: レコードが正常に挿入されたか、または他の状況でロールバックが発生したか? その場合は、ロールバックの原因を見つけてください (#2 を参照)。

2) 非挿入ステートメントを実行している場合は、値 -1 も返されます。挿入を実行していることはわかっていますが、このテーブルのトリガーはどうですか? トリガーで Select ステートメントを実行していますか?

お役に立てれば。

于 2013-01-25T12:10:47.130 に答える