2012-09-07 55 views
1

我对C#很陌生,试图向访问数据库插入多个值,其中一个值将递增1.我不能在访问中使用自动编号,因为条目开始在99001,我将需要能够轻松编辑/跳过数字。我整天都在尝试不同的帖子,与之类似,但所有这些都会导致错误或不起作用。我的代码目前如下。插入MAX()+ 1和其他值

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" /> 

但是这给了我一个错误说“查询值和目标字段数是不一样的。”任何关于如何解决这个问题或替代方法来实现我所寻找的结果的想法?

+0

您正在用4'''添加5个参数。指示你没有给出适量的参数。 –

+1

尽量不要将“serial”定义为InsertParameter。 –

回答

0

如果您只是硬编码值,该怎么办?

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

我认为你做的是正确的事情。自动编号(SQL中的标识列)用于编号记录,并且生成手动编号可能会给您带来一些问题,正如您所说的,您是初学者。您还需要知道AutoNumber列的种子和起始号码是如何工作的。

顺便问一下,您的问题与您在评论中提到的任何内容无关。它只是说您在Insert子句中插入的列与目标表中的列不同。

干杯

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"; 

此外,命名查询输入参数documentation节目,而不是问号。如果上面的代码不起作用,请尝试将InsertCommand更改为此。

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