Frage

Dies ist mein erster Sprung auf LINQ to SQL. Ich eröffne mein dbml im Designer eine SQL Server Express-Datenbank. Ich erstelle eine gespeicherte Prozedur namens StoredProcedure1, die ich auch in die dbml gezogen. Dann schrieb ich einen Code bis zu testen, ob ich einige der Felder aktualisieren kann. Das Problem ist, dass keine Aktualisierungen der Datenbank auftreten, aber ich sehe die Änderungen, wenn die Daten an ein Datagrid gebunden ist. Ich habe keine Ahnung, warum es nicht funktioniert oder was ich tue, falsch. Hier ist der 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;

Die gespeicherte Prozedur greift nur alle Datensätze aus einer Tabelle:

    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
War es hilfreich?

Lösung 3

ich es herausgefunden. Im LINQ2SQL Designer, den Rückgabetyp festgelegt für StoredProcedure1 statt automatisch generierte TEST_TABLE.

Andere Tipps

Nun, wenn Sie keine Ahnung haben, was Sie falsch machen, wahrscheinlich könnten Sie etwas einfacher, wie eine klassische Auswahlabfrage auf einige bestehende Objekte in der Datenbank, aktualisieren Sie einige Felder und SubmitChanges () versuchen. Dann könnten Sie auf Ihrem Beispiel bauen, indem Sie Ihre Grid zu den Ergebnissen zurückgegeben, indem Sie Ihre Auswahlbindung und rufen SubmitChanges () in der richtigen Event-Handler des Grids.

Sie sollten direkt die Datensätze aus der Datenbank durch LinqToSql ändern. Ändern der Ergebnisse, die Sie aus der gespeicherten Prozedur abgerufen wird die Datenbank nicht aktualisieren.

Versuchen Sie so etwas wie dieses, sondern die gespeicherte Prozedur aufzurufen:

var result = data.TEST_TABLES();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top