运行 具有 SQL 模拟的 LINQPad 查询

Running a LINQPad query with SQL impersonation

我正在尝试在 LINQPad 中使用 impersonation 执行 SQL 查询,但模拟用户无权访问原始用户的 AppData 文件夹,这导致我的 SqlConnection构造函数抛出 TypeInitializationException:

using (var db = new SqlConnection(ConnectionString))
{
    // ...
}

The type initializer for 'System.Data.SqlClient.SqlConnection' threw an exception.

此处的 InnerException 是 FileNotFoundException LINQPad 查询的实际可执行文件:

C:\Users\MyUser\AppData\Local\LINQPad\ProcessServer5AnyCPUB\LINQPad.UserQuery.exe

我有什么方法可以配置该文件夹,以便 LINQPad 会尝试 运行 在所有用户帐户都可以访问的位置使用可执行文件?我查看了 LINQPad 的首选项,但找不到任何地方来指定 LINQPad.UserQuery.exe

的文件夹

我在 LINQPad 用户论坛 (link) 中发布问题后设法解决了这个问题。密钥来自 Joe Albahari 自己建议的link:

https://social.msdn.microsoft.com/Forums/lync/en-US/90e313c6-bf2f-45ac-a595-a7b6c4aae7e1/windowsidentityimpersonate-throws-catastrophic-failure-exception-from-hresult-0x8000ffff

我移动了模拟调用,这样它就不再环绕 SqlConnection 和与其关联的命令,它现在只环绕我的 db.Open() 语句。这是因为模拟的 SqlConnection 构造函数试图从它可能无法访问的地方读取各种配置。

如果连接池中有一个预先打开的连接可用,我仍在与自己争论这是否会导致问题,但就我的应用程序而言,我没有这个问题。