Frage

Ich verwende indizierte Ansichten in meiner Datenbank.Der Client sollte also eine Sitzungsverbindungseinstellung haben, um sie aufzurufen.Ich verwende die ado.net-Verbindung, einen Befehl zum Aufrufen gespeicherter Prozeduren. Jedes Mal, wenn ich eine gespeicherte Prozedur aufrufen muss, erstelle ich eine Verbindung (ich hoffe, der Verbindungspool ermöglicht mir dies schnell) und führe einen Befehl aus, um diese Einstellungen auf die aktuelle Verbindung anzuwenden.

// some code to create a new connection
 //...
 //... 

 if (connection.State != ConnectionState.Open)
 {
     connection.Open();
 }



    using (var cmd = connection.CreateCommand())
    {
        cmd.CommandType = CommandType.Text;
        cmd.CommandText =
                            @"
                    SET ANSI_NULLS ON
                    SET ANSI_PADDING ON
                    SET ANSI_WARNINGS ON
                    SET ARITHABORT ON
                    SET CONCAT_NULL_YIELDS_NULL ON
                    SET QUOTED_IDENTIFIER ON
                    SET NUMERIC_ROUNDABORT OFF";
        cmd.ExecuteNonQuery();
    }

Anderer Gedanke: Hinzufügen dieser Einstellungen vor jedem Aufruf der gespeicherten Prozedur:

command.CommandText = 'SET....';
command.CommandText += ' EXEC MyStroredProc @...'; 

Diese Lösung verursacht einige Leistungsprobleme, nicht wahr?

Wie kann ich so zusätzliche Arbeit vermeiden, wenn ich jedes Mal eine neue Verbindung herstellen muss?Wie wende ich diese Einstellung automatisch an?

LÖSUNG:

ALTER DATABASE [MyDB] 
    SET 
    ANSI_NULLS ON,
    ANSI_PADDING ON,
    ANSI_WARNINGS ON,
    ARITHABORT ON,
    CONCAT_NULL_YIELDS_NULL ON,
    QUOTED_IDENTIFIER ON,
    NUMERIC_ROUNDABORT OFF

War es hilfreich?

Lösung

Gemäß der Dokumentation können Sie diese Einstellungen in der Datenbank festlegenStufe:

Mit ALTER DATABASE festgelegte Datenbankeinstellungen sind nur auf Datenbankebene gültig und werden nur wirksam, wenn sie explizit festgelegt werden.Die Datenbankeinstellungen überschreiben die Einstellungen der Instanzoptionen, die mit sp_configure festgelegt wurden.

Hast du das versucht?

Leider können diese Eigenschaften nicht in der Verbindungszeichenfolge festgelegt werden. Verwenden Sie daher diese SQL:

ALTER DATABASE dbname SET ANSI_NULLS ON
-- etc

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top