TableAdapter的方法保持从标量重置为NonQuery

时间:2009-06-19 02:27:48

标签: asp.net visual-studio tableadapter

我在Visual Studio 2008 Pro解决方案中使用.xsd文件,我遇到了tableadapter方法重置的ExecuteMode属性问题。我在多个适配器中创建了一些插入方法。我在插入SQL之后使用“SELECT SCOPE_IDENTITY()”来返回新记录的id。然后我将ExecuteMode属性更新为Scalar(来自NonQuery)。每隔一段时间我就会注意到ExecuteMode会改回NonQuery。我无法弄清楚为什么。在我的工作中,我没有注意到一种导致变化的模式。你们这些.Net极客们有什么想法吗?

2 个答案:

答案 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的常用方法。