P.B*_*key 3 c# sql asp.net tableadapter
我正在努力完成一个看似简单的任务,这个任务已经变成了几个小时的冒险:@@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");
}
Run Code Online (Sandbox Code Playgroud)
一个答案表明,我可能要做的就是改变ExecuteMode.我试过了.这使得GetData()退出工作(因为我现在返回一个标量而不是rowdata)(我需要保留GetData()).它也没有解决insertID变量仍然设置为1的问题.
我试图创建第二个TableAdapter在TypedDataSet.XSD和设置属性为适配器"标",但它仍然无法与变量中获得的值为1.
生成的insert命令是
INSERT INTO [dbo].[Sites] ([Name], [Description]) VALUES (@Name, @Description);
SELECT Id, Name, Description FROM Sites WHERE (Id = SCOPE_IDENTITY())
Run Code Online (Sandbox Code Playgroud)
并且还设置了"刷新数据表"(在Insert和Update语句之后添加select语句以检索Identity).
环境
SQL Server 2008 R2,Visual Studio 2010,.NET 4,Windows XP,所有本地同一台机器.
是什么导致了这个?
编辑/ UPDATE
我想澄清我在Visual Studio中使用自动生成的代码.我不知道生成代码的"工具"是什么,但如果双击*.XSD文件,它会显示SQL表模式的UI和关联的TableAdapter.我想继续使用自动生成的代码,并以某种方式启用获取身份.我不想用存储过程手动编写这一切.
真正的答案:
从tableadapter插入函数获取标识
我经常不断地对这个问题提出疑问,而且从来没有时间把它写下来.
好吧,问题是如下:你有主键的表,int类型定义为Identity,插入后你需要知道新插入的行的PK值.完成此操作的步骤如下:
使用向导在查询体中添加新的插入查询(让我们称之为InsertQuery)只需在保存此查询后在底部添加SELECT SCOPE_IDENTITY(),将此查询的ExecuteMode属性从NonQuery更改为Scalar,在代码中写入以下(ta为TableAdapter实例):
Run Code Online (Sandbox Code Playgroud)int id; try { id = Convert.toInt32(ta.InsertQuery(firstName, lastName, description)); } catch (SQLException ex) { //... } finally { //... }用这个赚钱!:)由DraškoSarić于2009年3月12日发布
来自:http: //quickdeveloperstips.blogspot.nl/2009/03/get-identity-from-tableadapter-insert.html
笔记:
可以通过生成的插入查询的属性将ExecutMode设置为Scalar.(按F4).
在我的版本(Visual Studio 2010 SP1)中,select语句是自动生成的.
| 归档时间: |
|
| 查看次数: |
14658 次 |
| 最近记录: |