重要
Azure Data Studio 将于 2026 年 2 月 28 日停用。 建议使用 适用于 Visual Studio Code 的 MSSQL 扩展。 有关迁移到 Visual Studio Code 的详细信息,请访问 Azure Data Studio 发生了什么情况?
Azure Data Studio 提供了一个 API,扩展可以使用该 API 与 Azure Data Studio 的其他部分(例如对象资源管理器)进行交互。 这些 API 已在 src/sql/azdata.d.ts 文件中提供,如下所述。
连接管理
azdata.connection
用于连接管理的顶级函数
getCurrentConnection(): Thenable<azdata.connection.Connection>根据活动编辑器或对象资源管理器选择获取当前连接。getActiveConnections(): Thenable<azdata.connection.Connection[]>获取所有活动用户连接的列表。 如果没有此类连接,则返回一个空列表。getCredentials(connectionId: string): Thenable<{ [name: string]: string }>获取一个字典,其中包含与连接关联的凭据。 否则,这些将作为data.connection.Connection对象下的选项字典的一部分返回,但会从该对象中去除。
连接
-
options: { [name: string]: string }连接选项字典 -
providerName: string连接提供程序的名称(例如“MSSQL”) -
connectionId: string连接的唯一标识符
示例代码
> let connection = azdata.connection.getCurrentConnection();
connection: {
providerName: 'MSSQL',
connectionId: 'd97bb63a-466e-4ef0-ab6f-00cd44721dcc',
options: {
server: 'mairvine-sql-server',
user: 'sa',
authenticationType: 'sqlLogin',
...
},
...
}
> let credentials = azdata.connection.getCredentials(connection.connectionId);
credentials: {
password: 'abc123'
}
对象资源管理器
azdata.objectexplorer
对象浏览器的高级函数
getNode(connectionId: string, nodePath?: string): Thenable<azdata.objectexplorer.ObjectExplorerNode>获取与给定连接和路径对应的对象资源管理器节点。 如果未给定路径,则返回给定连接的顶级节点。 如果给定路径中没有节点,则返回undefined。 注意:对象的nodePath由 SQL 工具服务后端生成,很难手动构造。 将来的 API 改进使你能够基于你提供的有关节点的元数据(例如名称、类型和架构)获取节点。getActiveConnectionNodes(): Thenable<azdata.objectexplorer.ObjectExplorerNode>获取所有活动的对象资源管理器连接节点。findNodes(connectionId: string, type: string, schema: string, name: string, database: string, parentObjectNames: string[]): Thenable<azdata.objectexplorer.ObjectExplorerNode[]>查找与给定元数据匹配的所有对象资源管理器节点。schema、database和parentObjectNames参数在不适用时应设为undefined。parentObjectNames是对象资源管理器中从最高级别到最低级别的非数据库父对象列表,所需对象位于其中。 例如,当使用连接 IDconnectionId搜索属于表“schema1.table1”和数据库“database1”的列“column1”时,请调用findNodes(connectionId, 'Column', undefined, 'column1', 'database1', ['schema1.table1'])。 另请参阅 Azure Data Studio 针对此 API 调用默认支持的类型的列表。
ObjectExplorerNode
connectionId: string节点所在的连接的 IDnodePath: string节点的路径,用于调用getNode函数。nodeType: string表示节点类型的字符串nodeSubType: string表示节点子类型的字符串nodeStatus: string表示节点状态的字符串label: string对象资源管理器中显示的节点标签isLeaf: boolean节点是否为叶节点,因此没有任何子级metadata: azdata.ObjectMetadata描述此节点表示的对象的元数据errorMessage: string节点处于错误状态时显示的消息isExpanded(): Thenable<boolean>节点当前是否在对象资源管理器中展开setExpandedState(expandedState: vscode.TreeItemCollapsibleState): Thenable<void>设置节点是展开还是折叠。 如果状态设置为“无”,则不会更改节点。setSelected(selected: boolean, clearOtherSelections?: boolean): Thenable<void>设置是否选择了节点。 如果clearOtherSelections为 true,则在进行新选择时清除所有其他选择。 如果为 false,则保留任何现有选择。 如果clearOtherSelections为 true,则selected默认为 true;如果selected为 false,则默认为 false。getChildren(): Thenable<azdata.objectexplorer.ObjectExplorerNode[]>获取此节点的所有子节点。 如果没有子节点,则返回一个空列表。getParent(): Thenable<azdata.objectexplorer.ObjectExplorerNode>获取此节点的父节点。 如果没有父级,则返回未定义。
示例代码
private async interactWithOENode(selectedNode: azdata.objectexplorer.ObjectExplorerNode): Promise<void> {
let choices = ['Expand', 'Collapse', 'Select', 'Select (multi)', 'Deselect', 'Deselect (multi)'];
if (selectedNode.isLeaf) {
choices[0] += ' (is leaf)';
choices[1] += ' (is leaf)';
} else {
let expanded = await selectedNode.isExpanded();
if (expanded) {
choices[0] += ' (is expanded)';
} else {
choices[1] += ' (is collapsed)';
}
}
let parent = await selectedNode.getParent();
if (parent) {
choices.push('Get Parent');
}
let children = await selectedNode.getChildren();
children.forEach(child => choices.push(child.label));
let choice = await vscode.window.showQuickPick(choices);
let nextNode: azdata.objectexplorer.ObjectExplorerNode = undefined;
if (choice === choices[0]) {
selectedNode.setExpandedState(vscode.TreeItemCollapsibleState.Expanded);
} else if (choice === choices[1]) {
selectedNode.setExpandedState(vscode.TreeItemCollapsibleState.Collapsed);
} else if (choice === choices[2]) {
selectedNode.setSelected(true);
} else if (choice === choices[3]) {
selectedNode.setSelected(true, false);
} else if (choice === choices[4]) {
selectedNode.setSelected(false);
} else if (choice === choices[5]) {
selectedNode.setSelected(false, true);
} else if (choice === 'Get Parent') {
nextNode = parent;
} else {
let childNode = children.find(child => child.label === choice);
nextNode = childNode;
}
if (nextNode) {
let updatedNode = await azdata.objectexplorer.getNode(nextNode.connectionId, nextNode.nodePath);
this.interactWithOENode(updatedNode);
}
}
vscode.commands.registerCommand('mssql.objectexplorer.interact', () => {
azdata.objectexplorer.getActiveConnectionNodes().then(activeConnections => {
vscode.window.showQuickPick(activeConnections.map(connection => connection.label + ' ' + connection.connectionId)).then(selection => {
let selectedNode = activeConnections.find(connection => connection.label + ' ' + connection.connectionId === selection);
this.interactWithOENode(selectedNode);
});
});
});
建议的 API
我们添加了建议的 API,以允许扩展在对话框、向导和文档选项卡中显示自定义 UI 以及其他功能。 有关更多文档,请参阅 建议的 API 类型文件,但请注意,这些 API 随时可能会更改。 有关如何使用这些 API 的示例,请参阅 “子服务”示例扩展。