2012-03-29 6 views
1

Erstens bin ich ziemlich neu in LINQ to SQL, also ist dies wahrscheinlich eine dumme Frage, aber ich versuche, einen neuen Datensatz in die Datenbank und ich einzufügen halten sie die folgende Störung zu erhalten:LINQ to SQL SubmitChanges() funktioniert nicht zum Einfügen neuer Datensatz

The client was unable to establish a connection because of an error during connection initialization process before login. Possible causes include the following: the client tried to connect to an unsupported version of SQL Server; the server was too busy to accept new connections; or there was a resource limitation (insufficient memory or maximum allowed connections) on the server. (provider: Shared Memory Provider, error: 0 - The handle is invalid.) 

ich kann meinen Code für Schritt durch und sehen sie, dass alle Daten vorhanden ist, wie ich es erwarten würde, aber wenn es die Hits

db.SubmitChanges() 

in dem folgenden Verfahren Ich bekomme den Fehler. Was mache ich falsch? Das ist SOO frustrierend und ich habe einen Tag verloren, LINQ to SQL herauszufinden ... Ich bin halb versucht, es einfach zu packen und ADO.NET und gespeicherte Procs wieder zu verwenden.

public static void Save(Customer customerToSave) 
    { 
     IpmDatabaseDataContext db = new IpmDatabaseDataContext(); 
     db.Customers.InsertOnSubmit(customerToSave); 

     // commit the changes to the db 
     db.SubmitChanges();  
    } 

In meiner app.config hat es diese Verbindungszeichenfolge:

<connectionStrings> 
    <add name="IPM.Business.Properties.Settings.IPMConnectionString" 
     connectionString="Data Source=socrates\sqlexpress;Initial Catalog=IPM;Integrated Security=True" 
     providerName="System.Data.SqlClient" /> 
</connectionStrings> 

ich noch Maschine auf meinem dev bin, so ist dies die richtige Verbindungszeichenfolge.

+1

Das hat wahrscheinlich etwas mit dem Setup der Datenbank oder der Verbindungszeichenfolge (Verbindungspooling usw.) zu tun. Könntest du mehr Infos dazu schreiben? –

+0

Ihr LINQ ist wahrscheinlich in Ordnung. Überprüfen Sie die Datenbankverbindung (oder erstellen Sie den Kontext neu) –

Antwort

0

Wie lautet die Verbindungszeichenfolge, die Sie an IpmDatabaseDataContext übergeben? Der Fehler, den Sie erhalten, steht nicht mit LINQtoSQL in Verbindung, es ist ein Datenbankverbindungsproblem.

das Problem zu debuggen, versuchen Sie explizit die Verbindungszeichenfolge an den Konstruktor DataContext vorbei, zum Beispiel:

IpmDatabaseDataContext db = new IpmDatabaseDataContext(
    @"Data Source=localhost\SQLEXPRESS;Integrated Security=true"); 

Die folgenden Beiträge zeigen, dass die Shared Memory-Provider ... Griff Fehler weggeht ist ungültig wenn Sie Windows-Neustart:

ASP.NET MVC : Using the same database for Entity Framework and ASP.NET Membership

A transport-level error has occurred when receiving results from the server

+0

In meiner app.config hat es diese Verbindungszeichenfolge: Cory

+0

Ich habe es gerade versucht und es hat nicht funktioniert. Ich habe den gleichen Fehler. IpmDatabaseDataContext db = Neu IpmDatabaseDataContext (@ "Server = Sokrates \ SQLEXPRESS; Integrierte Sicherheit = SSPI; Database = IPM"); – Cory

+0

Erhalten Sie den gleichen "Shared Memory Provider ... Handle ist ungültig" Fehler beim Ausführen einer normalen ADO (nicht-LINQtoSQL) INSERT für die gleiche Tabelle, die gleiche Datenbank, im selben Projekt? –