我正在尝试完成一项看似简单的任务,却变成了几个小时的冒险:@@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()
退出工作(因为我现在返回一个标量而不是行数据)(我需要保留 GetData())。它也没有解决问题,insertedID 变量仍然设置为 1。
我尝试在 中创建第二个TableAdapter
并将TypedDataSet.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 表架构和关联的 TableAdapter 的 UI。我想继续使用自动生成的代码并以某种方式启用获取身份。我不想用存储过程手动编写这一切。