Pregunta

Estoy usando vistas indexadas en mi base de datos.Por lo que el cliente debe tener alguna configuración de conexión de sesión para llamarlos.Estoy usando la conexión ado.net, comando para llamar a procedimientos almacenados. Cada vez que tengo que llamar a un procedimiento almacenado, creo una conexión (espero que el grupo de conexiones me permita hacer esto rápidamente) y ejecuto un comando para aplicar esta configuración a la conexión actual.

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

Otro pensamiento: agregar estas configuraciones antes de cada llamada del procedimiento almacenado:

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

Esta solución causa algunos problemas de rendimiento, ¿no es así?

¿Cómo puedo evitar tanto trabajo extra si tengo que crear una nueva conexión cada vez?¿Cómo aplicar esta configuración automáticamente?

<×SOLUCIÓN:

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

¿Fue útil?

Solución

De acuerdo con la documentación , puede establecer estas configuraciones en la base de datosnivel:

La configuración de la base de datos establecida mediante ALTER DATABASE es válida solo en el nivel de la base de datos y surte efecto solo si se establece explícitamente.La configuración de la base de datos anula la configuración de la opción de instancia que se establece mediante sp_configure.

¿Intentaste eso?

Desafortunadamente, estas propiedades no se pueden establecer en la cadena de conexión, así que use este sql:

ALTER DATABASE dbname SET ANSI_NULLS ON
-- etc
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top