Impostazione della sessione per supportare le viste indicizzate
-
27-10-2019 - |
Domanda
Sto utilizzando viste indicizzate nel mio database.Quindi il client dovrebbe avere alcune impostazioni di connessione della sessione per chiamarli.Sto usando la connessione ado.net, comando per chiamare procedure memorizzate. Ogni volta che devo chiamare una stored procedure creo una connessione (spero che il pool di connessioni mi consenta di farlo rapidamente) ed eseguo un comando per applicare queste impostazioni alla connessione corrente.
// 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();
}
Altro pensiero: aggiungere queste impostazioni prima di ogni chiamata alla procedura memorizzata:
command.CommandText = 'SET....';
command.CommandText += ' EXEC MyStroredProc @...';
Questa soluzione causa alcuni problemi di prestazioni, non è vero?
Come posso evitare di lavorare così tanto se devo creare ogni volta una nuova connessione?Come applicare queste impostazioni automaticamente?
<”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
Soluzione
Secondo la documentazione , puoi configurare queste impostazioni nel databaselivello:
Le impostazioni del database impostate utilizzando ALTER DATABASE sono valide solo a livello di database e hanno effetto solo se impostate in modo esplicito.Le impostazioni del database sovrascrivono le impostazioni delle opzioni dell'istanza impostate utilizzando sp_configure.
Hai provato?
Sfortunatamente, queste proprietà non possono essere impostate nella stringa di connessione, quindi usa questo sql:
ALTER DATABASE dbname SET ANSI_NULLS ON
-- etc