Question

Ceci est ma première visite chez LINQ to SQL. Je crée mon dbml dans le concepteur à l'aide d'une base de données SQL Server Express. Je crée une procédure stockée appelée StoredProcedure1, que j'ai également glissée dans le fichier dbml. Ensuite, j'ai écrit du code pour vérifier si je pouvais mettre à jour certains champs. Le problème est qu'aucune mise à jour n'a lieu dans la base de données, mais je vois les modifications lorsque les données sont liées à un DataGrid. Je ne sais pas pourquoi ça ne marche pas ou ce que je fais mal. Voici le code:

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;

La procédure stockée extrait simplement tous les enregistrements d'une table:

    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
Était-ce utile?

La solution 3

Je l'ai compris. Dans le concepteur LINQ2SQL, définissez le type de retour pour StoredProcedure1 sur TEST_TABLE au lieu de celui généré automatiquement.

Autres conseils

Eh bien, si vous n'avez aucune idée de ce que vous faites de mal, vous pouvez probablement essayer quelque chose de plus simple, comme une requête de sélection classique sur certains objets existants de la base de données, mettre à jour des champs et submitChanges (). Vous pouvez ensuite vous appuyer sur votre exemple en liant votre grille aux résultats renvoyés par votre sélection et en appelant SubmitChanges () dans le gestionnaire d’événements correct de la grille.

Vous devez modifier directement les enregistrements de la base de données via LinqToSql. La modification des résultats extraits de la procédure stockée ne mettra pas à jour la base de données.

Essayez quelque chose comme ceci au lieu d'appeler la procédure stockée:

var result = data.TEST_TABLES();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top