1

私はC#に非常に慣れておらず、アクセスデータベースに複数の値を挿入しようとしています。そのうちの1つは1ずつ増加します。エントリは99001から始まり、編集/スキップする機能が必要になるため、アクセスで自動番号を使用できません。簡単に数字。私はこれに似たさまざまな投稿を一日中試してきましたが、それらすべてがエラーを引き起こすか、単に機能しません。私のコードは現在次のとおりです。

AccessDataSource1.InsertCommand = "INSERT INTO [1U] ([serial], [model], [motherboard], [mobogroup], [bios]) SELECT ((SELECT MAX([serial])+1 FROM [1U]), ?, ?, ?, ?)";
AccessDataSource1.InsertParameters["serial"].DefaultValue = "1";
AccessDataSource1.InsertParameters["model"].DefaultValue = "D";
AccessDataSource1.InsertParameters["motherboard"].DefaultValue = "D";
AccessDataSource1.InsertParameters["mobogroup"].DefaultValue = "D";
AccessDataSource1.InsertParameters["bios"].DefaultValue = "D";

これを呼び出すボタンで

<asp:Button ID="InsertButton" runat="server"  OnClick="update_click" CausesValidation="True" CommandName="Insert" Text="Insert" />

しかし、これにより、「クエリ値と宛先フィールドの数が同じではありません」というエラーが表示されます。私が探している結果を達成するためにこれを修正する方法または代替方法に関するアイデアはありますか?

4

4 に答える 4

1

エントリが99910から始まるため、アクセスに自動番号を使用できません

シードされた自動番号を使用するようにMSAccessをだますことができます。これを行う方法の例については、1より大きい番号で始まる自動番号フィールドの作成を参照してください。

于 2012-09-07T16:34:43.067 に答える
1

4つのプレースホルダーと5つの挿入パラメーターがあり、これがエラーメッセージの理由です。クエリで使用していないserialため、そのInputParameterを削除します。

AccessDataSource1.InsertCommand = "INSERT INTO [1U] ([serial], [model], [motherboard], [mobogroup], [bios]) SELECT ((SELECT MAX([serial])+1 FROM [1U]), ?, ?, ?, ?)";
AccessDataSource1.InsertParameters["model"].DefaultValue = "D";
AccessDataSource1.InsertParameters["motherboard"].DefaultValue = "D";
AccessDataSource1.InsertParameters["mobogroup"].DefaultValue = "D";
AccessDataSource1.InsertParameters["bios"].DefaultValue = "D";

また、ドキュメントには、疑問符ではなく、クエリ内の名前付き入力パラメータが示されています。上記のコードが機能しない場合は、InsertCommandをこれに変更してみてください。

AccessDataSource1.InsertCommand = "INSERT INTO [1U] ([serial], [model], [motherboard], [mobogroup], [bios]) SELECT ((SELECT MAX([serial])+1 FROM [1U]), @model, @moetherboard, @mobogroup, @bios)";
于 2012-09-07T16:37:23.073 に答える
0

値をハードコーディングした場合はどうなりますか?

AccessDataSource1.InsertCommand = "INSERT INTO [1U] ([serial], [model], [motherboard], [mobogroup], [bios]) SELECT ((SELECT MAX([serial])+1 FROM [1U]), "D", "D", "D", "D")";
于 2012-09-07T16:34:36.570 に答える
0

あなたは正しいことをしていたと思います。AutoNumber(SQLのID列)はレコードに番号を付けるために作成されており、手動番号を生成すると、初心者であると言うように、いくつかの問題が発生する可能性があります。また、AutoNumber列のシード番号と開始番号がどのように機能するかを知る必要があります。

ちなみに、あなたの問題はあなたがコメントで言及したこととは何の関係もありません。Insert句に挿入する列は、ターゲットテーブルの列と同じではないことを示しています。

乾杯

于 2012-09-07T16:35:58.753 に答える