我在Visual Studio 2008 Pro解决方案中使用.xsd文件,我遇到了tableadapter方法重置的ExecuteMode属性问题。我在多个适配器中创建了一些插入方法。我在插入SQL之后使用“SELECT SCOPE_IDENTITY()”来返回新记录的id。然后我将ExecuteMode属性更新为Scalar(来自NonQuery)。每隔一段时间我就会注意到ExecuteMode会改回NonQuery。我无法弄清楚为什么。在我的工作中,我没有注意到一种导致变化的模式。你们这些.Net极客们有什么想法吗?
答案 0 :(得分:0)
我将其描述为VS中的错误或不正确的环境设置。我不能一直复制发生的事情,我无法找到解决方案。这是非常随机的,我不记得它是一个问题超过几次。
答案 1 :(得分:-1)
您应该使用插入值的SQL并选择新记录而不是SQL返回标量值来获取id。
如果在“选择命令类型”步骤中选择“创建新存储过程”,则“TableAdapter配置向导”会创建该类型的SQL,然后在“为选择存储过程输入SQL语句”步骤中选择“高级选项” “mark”生成Insert,Update ...“和”刷新数据表“。使用新闻程序的名称完成向导的其余部分。
生成的SQL就是这样的
INSERT INTO [apptbl] ([Id]) VALUES (@Id);
SELECT Id FROM apptbl WHERE (Id = SCOPE_IDENTITY())
使用TableAdapter ...
public int insert_newObj()
{
objDataTable dt = new objDataTable();
objRow dr = dt.NewObjRow();
// assign values to others fields, except the id...
dt.AddObjRow(dr);
Adapter.Update(dt);
return dr.Id;
}
请注意,由于存储过程中的第二个SQL语句(SELECT ...),datarow对象将由“适配器”填充新ID。
好吧,我不确定它是否有用,因为我没有看到你的SQL,但这是获取id的常用方法。