这是我第一次参加LINQ to SQL。我使用SQL Server Express数据库在设计器中创建我的dbml。我创建了一个名为StoredProcedure1的存储过程,我也将其拖入dbml。然后我写了一些代码来测试我是否可以更新一些字段。问题是数据库没有更新,但我看到数据绑定到DataGrid时的更改。我不知道为什么它不起作用或我做错了什么。这是代码:

DataClasses1DataContext data = new DataClasses1DataContext();
List<StoredProcedure1Result> result = new List<StoredProcedure1Result>(data.StoredProcedure1());


int i = 0;
foreach (StoredProcedure1Result r in result)
{
    r.TestField = "A" + i.ToString();
   i++;
}

// to see what has changed, set break point on next line
var changeSet = data.GetChangeSet(); 

// submit changes and show result in datagrid
data.SubmitChanges();
dataGrid.ItemsSource = result;

存储过程只是从表中获取所有记录:

    USE [E:\test\test.MDF]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[StoredProcedure1]
AS
    SELECT  * FROM TEST_TABLE
    RETURN
有帮助吗?

解决方案 3

我明白了。在LINQ2SQL设计器中,将StoredProcedure1的返回类型设置为TEST_TABLE而不是自动生成。

其他提示

如果您不知道自己做错了什么,可能您可以尝试更简单的方法,例如对数据库中某些现有对象的经典选择查询,更新一些字段和submitChanges()。然后,您可以通过将Grid绑定到select返回的结果来构建示例,并在网格的正确事件处理程序中调用SubmitChanges()。

您应该通过LinqToSql直接更改数据库中的记录。更改从存储过程检索的结果将不会更新数据库。

尝试这样的事情,而不是调用存储过程:

var result = data.TEST_TABLES();
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top