1
4
简而言之,它看起来不像你可以用任何简单的方式。 我的第一个想法是运行这个SQL:
如果您使用SQL Server Management Studio,这是可行的,但在从C代码运行时失败。问题是,当调用sp_setapprole时,您得到的错误不会发生;当连接池调用sp_reset_connection时,它实际上会发生。当您第一次使用连接时,连接池会调用这个,并且在它之前没有办法进入。 所以我想你有四个选择:
|
2
1
基于 Martin Brown's answer ,您可以尝试将“connection reset=false”添加到连接字符串中,作为“在”sp_reset_连接之前进入的方法。(见) Working with âsoiledâ connections “了解此设置的许多缺点。) 你的问题是 known issue with connection pooling . 建议的解决方法是禁用连接池…如果这是一个桌面应用程序,可能值得考虑保持几个连接打开(另请参见 the article linked above ) 这些天(SQL 2005+)建议(在 Application Roles and Connection Pooling )是“利用 new security mechanisms 您可以使用它来代替应用程序角色”,如execute as。 |
3
0
我不确定您的问题,但是我认为如果您创建了新的连接对象而不是重用它们,您可以避免这个问题。所以不要这么做
您可以执行以下操作:
(请原谅伪代码…我的eeepc上的键盘无法使用…) |
4
0
没有办法清除所有连接的池吗?sqlpools.clear之类的。 您可以简单地尝试捕获异常并创建一个新连接,这将强制池创建一个完整的新连接。 |
5
0
我也在回复你之前的问题时发布了这个。调用sp\u setapprole时,完成后应调用sp\u unsetapprole,我在这里提出的解决方案将帮助您: Detecting unusable pooled SqlConnections 似乎您正在调用sp_setapprole,但没有调用sp_unsetapprole,然后让连接返回池。 我建议在IDisposable实现中使用一个结构(或者一个类,如果必须跨方法使用它的话),它将为您处理这个问题:
客户端代码如下所示:
|
6
0
您可以检查C.State(ConnectionState对象),它应该是以下对象之一:
|
7
0
@EDG:你在评论中说,“…只有当它到达实际服务器时,才会遇到安全问题,如msg-quote中所述”。 这就指出了问题的根源:你 是 遇到安全问题,这似乎是不可避免的,因为调用代码假定的是另一个身份,而不是用来打开连接的身份。这自然会生成一个安全日志条目。 由于身份更改是按设计进行的,所以解决方案可能是过滤安全日志。事件查看器有一个筛选当前日志操作,可以按关键字或事件ID进行筛选。 +汤姆 |
8
-1
尝试移动
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
i_sniff_ket · 在unity之外使用unity类 2 年前 |