这是我第一次参加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
答案 0 :(得分:0)
如果您不知道自己做错了什么,可能您可以尝试更简单的方法,例如对数据库中某些现有对象的经典选择查询,更新一些字段和submitChanges()。然后,您可以通过将Grid绑定到select返回的结果来构建示例,并在网格的正确事件处理程序中调用SubmitChanges()。
答案 1 :(得分:0)
您应该通过LinqToSql直接更改数据库中的记录。更改从存储过程检索的结果将不会更新数据库。
尝试这样的事情,而不是调用存储过程:
var result = data.TEST_TABLES();
答案 2 :(得分:0)
我明白了。在LINQ2SQL设计器中,将StoredProcedure1的返回类型设置为TEST_TABLE而不是自动生成。