使用TableAdapter插入后返回不正确的ID

时间:2011-01-23 21:31:27

标签: c# c#-3.0 tableadapter

当我使用TableAdapter执行插入时:

int pid = this.purchaseTableAdapter.Insert(supplierid, datetime, "", 
    totalprice, amountpaid);

它返回错误的ID 1,而它应该返回15。

如何获取正确的ID?

5 个答案:

答案 0 :(得分:11)

将执行模式属性设置为标量then you get the ID,否则受行影响。您不在查询向导中设置查询的属性属性窗口。

alt text

(图28)

答案 1 :(得分:7)

表适配器返回受影响的行数而不是id。

答案 2 :(得分:1)

我假设你有一个带有自动生成值的pid列。

reply to this post有答案。

select @@pid 

从相同的开放连接应该这样做。

答案 3 :(得分:1)

1)存储过程:

存储过程的主体必须与此类似:

INSERT INTO MyTable (C1, C2, C3) VALUES (@c1, @c2, @c3);

SELECT SCOPE_IDENTITY();

这里重要的部分是使用 SELECT SCOPE_IDENTITY()而不是 RETURN SCOPE_IDENTITY()。 编辑:如果您正在调用函数而不是存储过程,则使用RETURN将起作用。

2)表适配器:

右键单击表适配器,然后从上下文菜单中选择“添加查询”。弹出TableAdapter查询配置向导:

  • 选择命令类型:选择“使用现有存储过程”。

  • 选择SP返回的数据形状:选择“单个值”。

  • 为方法输入适当的名称,例如的 InsertXYZ

3)您的代码:

现在,当您在表适配器上调用方法 InsertXYZ 时,它将返回一个可以强制转换为Int32的对象。该值是新记录的ID!

答案 4 :(得分:0)

这篇文章ASP.NET tableadapter insert not returning the correct identity value

怎么样?

我真的不知道c#,但函数可能会返回受影响的行数,或者布尔值1表示true,0表示false表示?