0

SQL Server 2008 でデータベースを作成し、自動インクリメント ID フィールドを持つテーブルを作成しました

また、c#.net 2008 でプロジェクトを開発しています

BindingNavigator から [新規追加] の後に [データを保存] をクリックすると問題が発生する

たとえば、「新規追加」をクリックし、ID テキスト (空欄の ID) 以外のすべてのフィールドに入力してから、「データの保存」をクリックすると、エラーが発生します。

実行時例外は「notNullAllowedException: 列 'id' は null を許可されていません。

ただし、ユーザーがこのフィールドに入力する必要はありませんが、保存後にデータベースから返される必要があります

ID のプロパティも設定します: (C# プロジェクトと SQL サーバーの両方)

AutoIncrement = True
AutoIncrementStep = -1 (also I tested 1)
AutoIncrementSeed = -1 (also I tested 1)

結果がありません。

どうすればそれを処理できますか?

ありがとう

4

2 に答える 2

4

Insert ステートメントに ID 列を含めないでください。

あなたの発言が

INSERT INTO MyTable (ID, SomeField, SomeOtherField) VALUES (null, 'SomeValue', 'AnotherValue')

に変更するだけです

INSERT INTO MyTable ( SomeField, SomeOtherField) VALUES ( 'SomeValue', 'AnotherValue')
于 2012-05-18T19:45:49.527 に答える
0

2つの問題があるようです。

まず、常に挿入しています。「保存」が挿入か更新かを決定するためにどのロジックを使用していますか? これは、「明示的に挿入できません...」というエラーが発生したためだと思います。

次に、次の save=update のために ID フィールドに書き込むことができるように、SQL が挿入に割り当てた ID を取得する必要があります。これを行うにはいくつかの方法がありますが、私が好む方法は、ストアド プロシージャを使用して挿入を行い、SCOPE_IDENTITY() を取得する OUTPUT パラメーターを渡すことです。このようなもの:

CREATE PROC xyz
(
    @data...
    @NEWID INT OUTPUT
)
AS
    ... do your INSERT ...
    SET @NewID = SCOPE_IDENTITY()

)

構文を再確認してください - 使用している SQL のバージョンがわからない

于 2012-05-18T19:49:11.830 に答える