2011-09-07 44 views
2

我在我的数据库中使用索引视图。所以客户端应该有一些会话连接设置来调用它们。我正在使用ado.net连接,命令来调用存储过程。 每次我必须调用一个存储过程时,我都会创建连接(我希望连接池允许我快速执行此操作)并执行命令将这些设置应用于当前连接。支持索引视图的会话设置

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

其他想法:存储过程的每一个电话之前添加这些设置:

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

该解决方案将导致一些性能问题,不是吗?

如果我每次都必须创建一个新连接,我该如何避免这么多额外的工作?如何自动应用这些设置?

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

你有什么版本的SQL服务器的? – VMAtm

+0

@VMAtm标签加入 – garik

回答

5

根据documentation,你可以设置数据库级以下设置:通过使用ALTER DATABASE设置

数据库设置是有效的只有在数据库级别和只有明确设置才能生效。数据库设置覆盖使用sp_configure设置的实例选项设置。

你试过吗?

不幸的是,这个属性不能在连接字符串设定,所以用这个SQL:

ALTER DATABASE dbname SET ANSI_NULLS ON 
-- etc 
+0

@garik祝你好运! – VMAtm