0

C#とMicrosoft.Jet.OLEDB.4.0プロバイダーを使用して、Accessmdbに行を挿入しています。

はい、私はAccessが最悪だと知っています。これは巨大なレガシーアプリであり、他のすべては問題なく動作します。

テーブルには自動番号列があります。行を挿入しましたが、自動番号列がゼロに設定されています。

私は質問をグーグルで検索し、このテーマに関して見つけたすべての記事を読みました。自動番号列に-1を挿入することを提案しましたが、これは機能しませんでした。私が見つけた他の提案はどれもうまくいきませんでした。

大きなSQLテキスト文字列を連結するのではなく、OleDbParameterを使用しています。

トランザクションありとなしで挿入を試しました。変わりはない。

この挿入を機能させるにはどうすればよいですか(つまり、自動番号列の内容を正しく設定する)?

よろしくお願いします。

アダム・レファート

4

2 に答える 2

2

Access では、明示的な値を IDENTITY (別名 Automnumber) 列に INSERT することができます。あなた (またはあなたのミドルウェア) が IDENTITY 列にゼロの値を書き込んでいて、IDENTITY 列に一意の制約がない場合、それで説明がつくかもしれません。

明確にするために、構文を使用する必要があります

INSERT INTO (<column list>) ... 

また、列リストでは IDENTITY 列を省略してください。Jet SQL では、列リスト全体を省略できますが、暗黙的にIDENTITY 列を含めることができます。したがって、INSERT INTO () 構文を使用して IDENTITY 列を明示的に省略する必要があります。

Access/Jet では、明示的な値を IDENTITY 列に書き込むことができます。その場合、値は明らかに自動生成されません。したがって、ユーザーとミドルウェア (ADO.NET など) の両方が IDENTITY 列にゼロ値を明示的に書き込まないようにしてください。

ところで、下の表の IDENTITY 列については、INSERT ごとに値ゼロを自動生成します。

CREATE Table Test1 
(
   ID INTEGER IDENTITY(0, -2147483648) NOT NULL, 
   data_col INTEGER
);
于 2008-10-01T14:16:59.847 に答える
0

挿入を行うときは、AutoNumber列の値を指定していないことを確認する必要があります。SQL Serverの場合と同様に、ID列に値を挿入しません。

于 2008-09-30T13:35:39.033 に答える