一尘不染

从TableAdapter获取@@ IDENTITY

sql

我正在尝试完成一项看似简单的任务,但该任务已经变成了数小时的冒险:@@Identity从入门TableAdapter.Insert()

这是我的代码:

protected void submitBtn_Click(object sender, EventArgs e)
{
    AssetsDataSetTableAdapters.SitesTableAdapter sta = new AssetsDataSetTableAdapters.SitesTableAdapter();
    int insertedID = sta.Insert(siteTxt.Text,descTxt.Text);

    AssetsDataSetTableAdapters.NotesTableAdapter nta = new AssetsDataSetTableAdapters.NotesTableAdapter();
    nta.Insert(notesTxt.Text, insertedID, null,null,null,null,null,null);
    Response.Redirect("~/Default.aspx");
}

一个 答案 表明,我可能要做的就是更改ExecuteMode。我试过了
这使GetData()退出工作(因为我现在返回的是标量而不是rowdata)(我需要保留GetData())。它还不能解决该问题,因为insertID变量仍设置为1。

我试图创建第二个TableAdapterTypedDataSet.XSD和设置属性为适配器“标”,但它仍然无法与变量中获得的值为1。

生成的插入命令是

INSERT INTO [dbo].[Sites] ([Name], [Description]) VALUES (@Name, @Description);
SELECT Id, Name, Description FROM Sites WHERE (Id = SCOPE_IDENTITY())

并且还设置了“刷新数据表”(在Insert和Update语句之后添加一个select语句以检索标识)。

环境

SQL Server 2008 R2,Visual Studio 2010,.NET 4,Windows XP,所有本地同一台计算机。

是什么原因造成的?

编辑/更新

我想澄清一下,我在Visual Studio中使用自动生成的代码。我不知道生成代码的“工具”是什么,但是如果双击* .XSD文件,它将显示SQL Table
Schema和关联的TableAdapter的UI。我想继续使用自动生成的代码,并以某种方式启用获取身份。我不想用存储过程来手工编写所有内容。


阅读 140

收藏
2021-03-10

共1个答案

一尘不染

这是我的SQL代码。

CREATE PROCEDURE [dbo].[Branch_Insert]
(
    @UserId uniqueidentifier,
    @OrganisationId int,
    @InsertedID int OUTPUT
)
AS
    SET NOCOUNT OFF;
INSERT INTO [Branch] ([UserId], [OrganisationId]) 
VALUES (@UserId, @OrganisationId);

SELECT Id, UserId, OrganisationId FROM Branch WHERE (Id = SCOPE_IDENTITY())
SELECT @InsertedID = SCOPE_IDENTITY()

然后,当我创建表适配器时-我可以立即看到@InsertedID参数。

然后从代码开始,我要做的就是:

int? insertedId = 0;
branchTA.Insert(userId, orgId, ref insertedId);

我不是100%是否使用ref是最好的选择,但这对我有用。

祝你好运。

2021-03-10