我在数据库中使用索引视图。因此客户端应该有一些会话连接设置来调用它们。我正在使用 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 @...';
这个解决方案会导致一些性能问题,不是吗?
如果每次都必须创建新连接,如何避免额外的工作?如何自动应用这些设置?
解决方案:
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
根据文档 http://msdn.microsoft.com/en-us/library/ms190356.aspx,您可以在数据库级别设置这些设置:
使用 ALTER DATABASE 设置的数据库设置仅在数据库级别有效,并且仅在显式设置时才生效。数据库设置会覆盖使用 sp_configure 设置的实例选项设置。
你尝试过吗?
不幸的是,这个属性不能在连接字符串中设置,所以使用这个sql:
ALTER DATABASE dbname SET ANSI_NULLS ON
-- etc
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)