2011-09-07 1 views
2

J'utilise des vues indexées dans ma base de données. Donc, le client devrait avoir un certain paramètre de connexion de session pour les appeler. J'utilise la connexion ado.net, commande pour appeler les procédures stockées. Chaque fois que je dois appeler une procédure stockée, je crée une connexion (j'espère que le pool de connexions me permet de le faire rapidement) et j'exécute une commande pour appliquer ces paramètres à la connexion actuelle.Paramètre de session pour prendre en charge les vues indexées

// 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(); 
    } 

Autre pensée: ajout de ces paramètres avant chaque appel de procédure stockée:

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

Cette solution provoque des problèmes de performance, est-ce pas?

Comment puis-je éviter un travail supplémentaire si je dois créer une nouvelle connexion à chaque fois? Comment appliquer ces paramètres automatiquement?

SOLUTION:

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 
+0

Quelle version de sql-server avez-vous? – VMAtm

+0

@VMAtm tag ajouté – garik

Répondre

5

Selon le documentation, vous pouvez définir ces paramètres sur le niveau de base de données:

paramètres de base de données définis à l'aide ALTER DATABASE sont valables uniquement au niveau de la base de données et ne prend effet que s'il est explicitement défini. Les paramètres de base de données remplacent les paramètres d'option d'instance définis à l'aide de sp_configure.

Avez-vous essayé?

Malheureusement, ces propriétés ne peuvent pas être définies dans la chaîne de connexion, utilisez donc ce sql:

ALTER DATABASE dbname SET ANSI_NULLS ON 
-- etc 
+0

@garik Bonne chance dans vos projets – VMAtm

Questions connexes