Pergunta

Eu estou usando exibições indexadas no meu banco de dados. Assim, o cliente deve ter alguma definição de ligação sessão para chamá-los. Eu estou usando ado.net conexão, de comando para chamar procedimentos armazenados. Toda vez que eu tenho que chamar um procedimento armazenado criar conexão (espero pool de conexão me permite fazer isso rapidamente) e executar um comando para aplicar essas configurações para conexão atual.

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

Outro pensamento: adicionando estas definições antes de cada chamada de procedimento armazenado:

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

Esta solução faz com que alguns problemas de desempenho, não é?

Como posso evitar o trabalho de modo extra se eu tenho que criar uma nova conexão de cada vez? Como aplicar essas configurações automaticamente?

Solução:

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
Foi útil?

Solução

De acordo com a documentação , você pode definir essas configurações no banco de dados nível:

configurações de banco de dados criados usando ALTER DATABASE só são válidas para o efeito nível de banco de dados e tomada somente se explicitamente definido. definições de opções exemplo override de banco de dados configurações que são definidas usando sp_configure.

Você tentou isso?

Infelizmente, este propriedades não pode ser definido em cadeia de conexão, então use essa sql:

ALTER DATABASE dbname SET ANSI_NULLS ON
-- etc
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top