Ich möchte die bestehenden Verbindungen zu einem SQL Server schließen, damit ich eine Wiederherstellung für diese Datenbank durchführen kann. Ich benutze das Entity-Framework. Ich habe versucht,
auszuführen %Vor%aber dann bekomme ich eine Ausnahme, die das sagt
Verbindung wurde nicht geschlossen
Ich kann nicht herausfinden, warum die Verbindungen nicht geschlossen werden dürfen?
Dieses Bild zeigt die vollständige Ausnahme
das ist die Methode,
%Vor%Bearbeiten: Ich entfernte die erste .Open (). Jetzt habe ich nur Open ()
Sie erhalten diesen Fehler, wenn Sie bei einer Verbindung zweimal% code% aufrufen. Sie sollten alle SqlConnection-Objekte erstellen, die Sie in Open()
blocks erstellen, und sie nur einmal öffnen.
Wenn Sie Verbindungen wiederverwenden, "um es schneller zu machen", macht .NET das standardmäßig für Sie über Verbindungspooling , aber Sie müssen das Verbindungsobjekt entsorgen, damit es funktioniert.
Es scheint, dass Entity Framework eine Verbindung zur Datenbank hält. Sie können sehen, dass sp_who2
in SQL Server Management Studio ausgeführt wird, wobei Entity Framework unter ProgramName als EntityFrameworkMUE aufgeführt ist.
Sie müssen zwar keine "rohen" SQL-Anweisungen verwenden, um die aktiven Verbindungen zu trennen, aber es kann auch so gelöst werden:
%Vor%Sie müssen den Reader, den Befehl und die Verbindung entsorgen. Dein Leser ist nicht entsorgt. Dieses Code-Snippet garantiert, dass die Verbindung geschlossen wird, auch wenn während des Lesevorgangs Ausnahmen ausgelöst werden.
%Vor%Der Fehler ist ziemlich klar ... Mit Linq können Sie die Verbindung, auf der Sie gerade sind, nicht schließen. Ich habe das nicht versucht, aber ich denke, das Folgende würde funktionieren ... versuche eine gespeicherte Prozedur in deiner Datenbank zu erstellen und führe sie in deinem C # Code entweder mit einem TableAdapter oder SqlCommand aus (du kannst auch noch Linq benutzen). Dein Code wird nicht wissen, dass du eine gespeicherte Prozedur ausführen willst, die kurz davor ist, ihre Verbindung zu beenden, damit sie funktioniert.
%Vor%Jetzt können Sie diese gespeicherte Prozedur aus dem Code ausführen, und es werden offene Verbindungen, sogar Ihre eigenen, beendet. Viel Spaß!
Dein erstes Problem (nachdem du deinen Code gepostet hast) ist, dass du zweimal aufrufst:
%Vor%Als nächstes müssen Sie die Datenbank zurücksetzen, um alle Verbindungen zu schließen. Sie müssen eine separate Verbindungszeichenfolge verwenden, um eine Verbindung zu MASTER herzustellen, nicht die Datenbank, mit der Sie alle Verbindungen schließen möchten.
%Vor%Sobald Sie das obige SQL von MASTER gegen die Datenbank ausgeführt haben, die zurückgesetzt werden muss, sollten Sie gut sein, zu tun, was auch immer Sie tun müssen. Denken Sie daran, eine Verbindung zum Master herzustellen !! Wenn Sie sich mit der Datenbank verbinden, die Sie zurücksetzen möchten, schließen Sie alle Verbindungen, einschließlich Sie selbst, die nicht funktionieren!
Ändern Sie Ihren Katalog in Master.
Beispiel Verbindungszeichenfolge ( from MSDN ):
%Vor%Stellen Sie außerdem sicher, dass der von Ihnen verwendete SQL-Benutzer über vollständige Berechtigungen zum Verwalten verfügt. Sie tun dies, indem Sie das Management Studio öffnen und sich die Benutzer-Sammlung unter Master ansehen.
Es empfiehlt sich, vor dem Öffnen zu prüfen, ob die Verbindung offen ist. Versuchen Sie, eine Überprüfung hinzuzufügen, bevor Sie versuchen, Ihre Verbindung zu öffnen, etwa so:
%Vor%Dies wird helfen, das beschriebene Problem zu vermeiden.
Sie können SqlConnection verwenden. ClearAllPools und SqlConnection.ClearPool , um alle oder eine Verbindung in .NET zu schließen.
ClearPool löscht den Verbindungspool, der der Verbindung zugeordnet ist. Wenn zum Zeitpunkt des Aufrufs zusätzliche mit der Verbindung verknüpfte Verbindungen verwendet werden, werden sie entsprechend gekennzeichnet und werden verworfen (anstatt in den Pool zurückgegeben), wenn Close aufgerufen wird.
ClearAllPools setzt den Verbindungspool zurück (oder leert ihn). Wenn zum Zeitpunkt des Aufrufs Verbindungen in Verwendung sind, werden sie entsprechend gekennzeichnet und werden verworfen (anstatt in den Pool zurückgegeben), wenn Close aufgerufen wird.
für Beispiele:
%Vor%Tags und Links sql-server c# entity-framework database restore
Die Zeichen, die Sie auf Ihrem Bildschirm lesen, haben jetzt jeweils einen numerischen Wert. Im ASCII-Format ist beispielsweise der Buchstabe "A" 65, "B" 66 und so weiter. Wenn Sie sich eine Tabelle von Zeichen anschauen, die in ASCII verfügbar ist, werden Sie sehen, dass sie für jemanden, der dies wünscht, nicht viel nutzt schreibe etwas in Mandarin, Arabisch oder Japanisch. Damit Zeichen / Wörter aus diesen Sprachen angezeigt werden können, benötigten wir ein anderes System, um sie zu und von Zahlen zu codieren, die im Computerspeicher gespeichert sind.
UTF-8 ist nur eine der Codierungsmethoden, die zur Implementierung dieser Anforderung entwickelt wurden. Es erlaubt Ihnen, Text in allen möglichen Sprachen zu schreiben, so dass französische Akzente vollkommen in Ordnung erscheinen, genauso wie Texte wie diese.
Бзиа збаша (Bzia zbaşa), Фэсапщы, Ç'kemi, ሰላም und sogar von rechts nach links Schreiben wie dieses السلام عليكم
Wenn Sie den obigen Text kopieren und in den Editor einfügen und dann versuchen, die Datei als ANSI (ein anderes Format) zu speichern, erhalten Sie eine Warnung, dass das Speichern in diesem Format einen Teil der Formatierung verliert. Akzeptiere es, lade die Textdatei neu und du wirst etwas Ähnliches sehen.
???? ????? (Bzia zbasa), ???????, Ç'kemi, ???, und sogar von rechts nach links Schreiben wie das ?????? ?????
Ich habe gerade angefangen, HTML zu lernen (ohne Programmierkenntnisse) und weiß nicht, was das bedeutet. Ich schreibe es generell, wenn ich den Code danach starte, habe aber keine Ahnung was es bedeutet. Ich weiß auch nicht, was Doctyp bedeutet. Was passiert, wenn ich es nicht benutze?
Dieses Meta-Tag gibt im Grunde an, mit welchem Zeichensatz Ihre Website geschrieben wurde.
Hier ist eine Definition von UTF-8:
UTF-8 (U aus Universal-Zeichensatz + Transformationsformat-8-Bit) ist eine Zeichencodierung, die alle möglichen Zeichen codieren kann (Codepunkte genannt) in Unicode. Die Codierung ist variabler Länge und verwendet 8-Bit-Code-Einheiten.