sql-server - 如何将新的查询脚本与 SSMS 加载项连接?

标签 sql-server add-in ssms

我正在尝试创建一个 SSMS 加载项。我想做的一件事是创建一个新的查询窗口并以编程方式将其连接到服务器实例(在 SQL 登录的上下文中)。我可以很好地创建新的查询脚本窗口,但如果不首先手动连接到其他东西(如对象资源管理器),我找不到如何连接它。

换句话说,如果我手动将 Obect Explorer 连接到 SQL 实例,然后执行创建查询窗口的加载项方法,我可以使用以下代码连接它:

ServiceCache.ScriptFactory.CreateNewBlankScript(
     Editors.ScriptType.Sql,
     ServiceCache.ScriptFactory.CurrentlyActiveWndConnectionInfo.UIConnectionInfo,
     null);

但我不想依赖 CurrentlyActiveWndConnectionInfo.UIConnectionInfo 进行连接。我想以编程方式设置 SQL 登录用户名和密码。

有没有人有什么想法?

编辑:

通过将最后一个参数设置为 System.Data.SqlClient.SqlConnection 的实例,我设法连接了查询窗口。但是,该连接使用的是上次连接的登录上下文,而不是我试图以编程方式设置的上下文。也就是说,它连接的用户是在您单击“新建查询”按钮并且没有连接对象资源管理器时在“连接对话框”中选择的用户。

编辑 2:

我正在编写(或希望编写)一个加载项,以便在针对我们的生产服务器运行时自动将 SQL 语句和执行结果发送到我们的案例跟踪系统。我的一个想法是删除写入权限并通过此加载项分配登录名,这也会强制用户输入一个案例 # 如果不存在则取消该语句。我刚才的另一个想法是检查 ServiceCache.ScriptFactory.CurrentlyActiveWndConnectionInfo.UIConnectionInfo 中的服务器名称,并将其与我们的生产服务器列表进行比较。如果匹配且没有大小写 # 则取消查询。

最佳答案

以防万一其他人正在寻找一种以编程方式创建和连接查询窗口的方法 - SSMS 2012 的一个简短示例:

UIConnectionInfo u =new UIConnectionInfo();

u.ServerName = "TestPC\\ServerInstance";

u.ServerType = new Guid("8c91a03d-f9b4-46c0-a305-b5dcc79ff907");

u.AuthenticationType = 0;//Use AuthenticationType = 1 for SQL Server Authentication

u.AdvancedOptions.Set("DATABASE", "AdventureWorks2012");

IScriptFactory scriptFactory = ServiceCache.ScriptFactory;

if(scriptFactory != null)
{
  scriptFactory.CreateNewBlankScript(ScriptType.Sql, u, null);
} 

此代码片段将打开一个新的查询窗口,该窗口连接到具有 Windows 身份验证的指定服务器和数据库。

关于sql-server - 如何将新的查询脚本与 SSMS 加载项连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1016343/

相关文章:

php - MsSQL编码问题

sql - 计算一列中另一列中有多个值的不同记录

c# - 如何使用注册表项将 VSTO 加载项添加到包含列表?

sql-server-2008 - 添加新外键时无法指定外键表

sql - SSMS:如何仅返回每个月/年最后一行的值而不是每一行?

SQL Server 2008 : how do I grant privileges to a username?

sql-server - T-SQL XQuery 嵌套命名空间问题

sql-server - 跨多个数据库创建 View

c# - 如何识别 Outlook 加载项中的 "my"自定义文件夹

excel - 如何在插入函数对话框中隐藏 protected Excel 加载项函数?