Visual Studio Code: 利用 MSSQL 插件创建数据库 IDE

尽管面对繁重的 .NET 开发任务 Visual Studio 仍是我的首选 IDE,但我却已深深迷恋上 Visual Studio Code (VS Code),无论我使用的语言是 C#、JavaScript 还是 Node,也无论我使用的操作系统是 Windows 还是 macOS。


当然,VS Code 及其大量插件还支持其他许多语言和框架,但这些是我当前使用的工具集。


不止我一人对 VS Code 迷恋不已。在 2017 年 3 月发布 Visual Studio 2017 期间,Microsoft 就宣布了 VS Code 每月有 130 万名活跃用户。最棒的地方在于,与所有跨平台工具一样,团队中的每位成员都可以选择自己常用的操作系统,但同时所有成员仍可使用相同的编码工具。


还有就是始终都会涉及到的数据。多年来,我一直仅使用 SQL Server 和从事 Windows 应用编码。但过去几年让我大开眼界,不仅出现了新的 IDE (VS Code),还出现了新的数据库和平台(就像我正在 MacBook Pro 中键入这句话一样)。


我接触 VS Code 始于我对 Node.js 的尝试,本专栏见证了这一切。最初是在 Windows 上进行尝试。但因为 VS Code 是跨平台工具(使用 Electron 生成),所以我最终在编写同一代码时来回切换平台:有时在 Windows 中,有时在 macOS 中(将 GitHub 用作通用标准)。由于有 C# 插件和跨平台 .NET Core,我最终超越了 Node.js,使用 EF Core 在两个环境中编写 .NET Core 应用。


使用 Visual Studio 时,我非常依赖内置的 SQL Server Data Tools 和 SQL CE/SQLite Toolbox 插件来探索我的应用要创建的大部分数据。不过,使用 VS Code 时,我需要借助某种外部力量来探索数据。将 Windows 和超轻量级 VS Code 结合使用时,绝不能打开根本就不是轻量级的 SQL Server Management Studio。


对于其他数据库,无论是在 Windows 还是 Mac 计算机上,我还在一直在使用 JetBrains DataGrip (jetbrains.com/datagrip)。这一款跨平台数据库工具,支持许多数据库。


不过,随着 VS Code 插件不断增多(当我在 2017 年 4 月下旬撰写本文时,仅略低于 3,000),许多用于与数据存储进行交互的插件现已发布。我用过两个,分别是来自 SQL Server 团队的 mssql 插件 (bit.ly/2gb2ICf),以及适用于 SQLite 和 PostgreSQL 的 vscode-database 插件 (bit.ly/2mh8nYF)。


使用这些插件,可以针对数据库编写和执行 SQL。我的 Pluralsight 课程“Entity Framework Core: 入门”中对这两个插件进行了演示。 还有其他与数据相关的插件。例如,用于与 Azure Data Lake(也来自 Microsoft)、Redis 和 SalesForce 数据存储进行交互。其中一些插件仍处于预览阶段,包括 mssql 插件。


在本文中,我将介绍一些与使用 mssql 插件相关的基础知识。起初我是打算 mssql 和 vscode-database 两个都写的,但 mssql 的功能实在是太丰富了,它的探索过程充满了乐趣,对它的介绍很快就占满了本专栏的篇幅。无论是在 Windows、macOS 还是在 Linux 上使用 mssql,都不会产生任何影响。


使用 mssql 插件,可以与各种 SQL Server 数据库进行交互: Microsoft SQL Server、Azure SQL 数据库和 SQL 数据仓库。我碰巧使用的是 MacBook,我将连接外部 SQL Server。


你可能会注意到,SQL Server 现在是在 Linux 上运行,这难道不奇妙吗? 也就是说,可以启动运行 SQL Server 的 Docker 容器。虽然在本文中我不会这样做,但我对此撰写了一篇博文 (bit.ly/2qaev9r)。


而我在本文中要做的是,连接云中的 Azure SQL Server 数据库。这是一个有力的提醒。也就是说,不必是 Windows 开发者/管理员或 C# 开发者,也可以利用 SQL Server。可以在 Azure 门户上管理数据库,并能通过任意类型的应用连接数据库。


那么,假设应用是 PHP,要使用适用于 VS Code 的 PHP 插件,并与 Azure SQL Server 数据库进行通信。 


我使用免费的 Azure 帐户和 Visual Studio 订阅随附的信用额度,以 AdventureWorks 示例为依据创建了一个 Azure SQL 数据库。有关如何执行此操作的文档,请访问 bit.ly/2o2IDTy


回到 VS Code,单击 VS Code 活动栏上的插件图标,筛选出 mssql,然后单击它对应的“安装”按钮,便可安装 mssql 插件。


安装完成时,系统会提示重载 VS Code。不过,请注意,在使用此插件的命令之一前,系统会延迟安装它的部分组件。请注意,对于 macOS,需要安装 OpenSSL。有关详细信息,请单击前面提供的 mssql 文档链接。


除了已安装的查询执行引擎外,mssql 还在 VS Code 命令面板中添加了大量命令。最好先连接数据库,尽管其他功能也会提示连接(如果尚未连接的话)。


按 F1(Ctrl/Command+Shift+P,如果使用的是不含功能键的有趣键盘之一的话)打开面板,键入“MS SQL”,筛选出所有 mssql 命令。如果没有其他任何插件为命令提供 SQL 关键字,SQL 会直接解决此问题。


我喜欢的是,甚至可以使用“入门指南”命令获取帮助文件。此外,还可以存储不同的连接,然后使用“管理连接配置文件”功能轻松进行连接。


与 mssql 进行交互的最简便方法是,打开文件进行编辑,并确保 VS Code 知道你正在编辑 SQL。借助新增的查询命令,无论打开的是文件夹还是项目,都可以这样做。这会创建 SQLQuery.sql 文件,并且 sql 插件会让 VS Code 切换到 mssql 编辑器。


当前编辑器显示在 VS Code 的右下角,这因文件扩展名而异,旨在提供适当的 IntelliSense 和插件提供的其他相关功能。可以根据需要单击显示的内容进行更改。mssql 编辑器不仅会有助于编写 TSQL,还知道如何执行查询和插件定义的其他任务。


在编辑器中打开 SQL 文件后,选择“MS SQL”: 从命令面板进行连接将会列出已创建的现有连接配置文件,并允许新建配置文件。选择“创建连接配置文件”,然后系统会提示输入连接字符串的各个关键元素。


例如,第一个提示要求提供服务器名称,如图 1 所示。由于我的 SQL Azure 数据库位于 thedatafarmsqlerver.database.windows.net 服务器上,因此我将输入此名称。


 图 1:使用 mssql 插件连接 SQL 数据库


接下来,系统会提示输入数据库名称、登录名和密码以及可选的配置文件名。顺便说一下,“管理连接配置文件”也可以转到这一步,因为它具有“创建”菜单选项。


填写连接信息且成功连接后,配置文件便会保存到 VS Code 设置文件中。对于版本 0.3,如果连接失败,将不会存储配置文件;但此体验即将发生变化。从 VS Code 菜单转到“首选项和设置”或按 Ctrl/Command+,(逗号)击键组合,可查看存储的配置文件。下面的示例展示了连接配置文件:


"mssql.connections": [{"authenticationType": "SqlLogin","server": "thedatafarmsqlserver.database.windows.net","database": "AdventureWorksSample","user": "me","password": "mypassword","savePassword": true,"profileName": "AzureAWSample"}}
]


在设置中存储配置文件后,可以视需要连接 AzureAWSample 或存储的其他配置文件。


连接后,便可以开始编写并执行 TSQL。执行此操作的最简单方法是,在编辑器中打开具有 SQL 扩展名的文件。正如之前所提到的,这会迫使 SQL 编辑器功能生效,其中一项非常棒的功能就是内置 TSQL 代码片段。


首先,在编辑器窗口中键入“sql”,IntelliSense 会列出内置代码片段,如图 2 所示。



图 2:mssql 插件提供的 TSQL 代码片段


可以看到,mssql 会执行允许使用的任何有效 TSQL,并不仅限查询现有数据。我要列出数据库或选定数据库中的表和视图,以验证我连接的数据库是否正确。ListTablesAndViews 代码片段非常适合执行此操作。通常,我都不得不使用 Google 和必应搜索诸如此类的 TSQL,所以我非常感谢有此代码片段。


按 Ctrl/Command+Shift+E 可执行此命令。也可以选择文本,然后右键单击调出上下文菜单,其中包括“执行”选项。


此时,包含响应的结果窗格会打开,如图 3 所示。



图 3:架构查询的结果


在右上角,你会注意到两个小图标。第一个图标用于将结果另存为 CSV 文本文件。第二个图标用于将结果另存为 JSON 格式。让我们来执行用于获取客户数据的查询,看看结果如何,然后将结果另存为 JSON 格式。


通过我面前的表列表,我可以开始键入查询。如图 4 所示,IntelliSense 启动,并且了解数据库架构。



图 4:IntelliSense 读取架构并帮助生成 TSQL


我将 select 语句修改为获取 SalesLT.Customer 中的三个列。然后,我可以突出显示此语句,并再次使用 Ctrl/Command+Shift+E 键盘快捷方式直接执行此查询。


与 SQL Server Management Studio 一样,我可以执行一个或多个语句,也可以查看一个或多个响应结果集。


结果显示在网格中,如图 5 所示。可以突出显示一个或多个行列组合,并单击 CSV 或 JSON 图标,然后系统会提示输入要保存的文件名。通过右键单击网格,可以轻松地使用上下文菜单选择所有数据。



图 5:客户数据查询结果


当系统提示输入文件名时,还会显示当前的文件夹路径。如果这就是所需的文件保存位置,则不必重新键入路径。只需键入文件名,即可将文件保存到此文件夹中。在最初的几次尝试期间,我并未意识到这一点,所以我从自己的错误中汲取了教训。


我仅选择了查询预测的客户数据的第一行,然后使用“保存为 JSON”图标,同时指定了文件名。下面展示了输出到我的文件中的 JSON:


[{"CustomerID": "1","FirstName": "Orlando","LastName": "Gee"  }
]


请注意,可以将自己的代码片段轻松添加到 VS Code 中。让我们来创建一个用于列出存储过程和函数的代码片段。


首先,转到“首选项和用户代码片段”。你会发现,mssql 插件添加了一个 SQL 代码片段模板。选择此模板,将会打开一个空白模板。添加更多代码片段时,将继续使用此文件。


此外,如果已创建一些代码片段要进行共享(还有可能是发现了 bug 或对 mssql 有其他想法),由于这是一个开放源代码插件,因此可以转到 github.com/Microsoft/vscode-mssql,提交拉取请求或问题,从而参与进来。


在长时间使用 Google 和必应进行搜索并测试各种想法后,我创建了下列代码片段,用于列出目标数据库中的所有存储过程和函数:


"List Stored Procedures": {"prefix": "sqlListStoredProcedures","body": ["SELECT [Name],[Type_Desc] " ,"FROM [sys].[all_objects] " ,"WHERE ([Type] = 'P' OR [Type]='FN' OR [Type]='TF' OR [Type]='IF') ","AND [Is_MS_Shipped] = 0"  ],"description": "List Stored Procedures"}


现在,当我在编辑器窗口中键入“sql”时,就可以使用 sqlListStoreProcedures 选项了。对目标数据库执行此命令的结果如下:


Name                         Type_Desc
uspPrintError                SQL_STORED_PROCEDURE
uspLogError                  SQL_STORED_PROCEDURE
ufnGetAllCategories          SQL_TABLE_VALUED_FUNCTION
ufnGetSalesOrderStatusText   SQL_SCALAR_FUNCTION
ufnGetCustomerInformation    SQL_INLINE_TABLE_VALUED_FUNCTION


通过右键单击结果网格并选择“连同标题一起复制”选项,我可以共享此输出。


正如午夜电视广告所说,“且慢! 还有更多精彩内容!” 编辑器窗口也有上下文菜单(见图 6)。



图 6:编辑器窗口上下文菜单


恕我直言,其中最有趣的项目是“转到定义”和“速览定义”。如果在编辑窗口中选择表名称(例如,图 5 所示命令中的“Customer”),这些命令会显示客户表的 CREATE 脚本。


mssql 插件在不断发展,我期待将来有更多更新。我在这里分享的版本 0.3.0 仍处于预览阶段。如果已在 Visual Studio Code 上安装此版本,将会收到更新通知。若要掌握和参与它的发展历程,请访问 GitHub 网站 (aka.ms/mssql-marketplace)。




Julie Lerman 住在佛蒙特州的丘陵地区,担任 Microsoft 区域主管、Microsoft MVP、软件团队导师和顾问。可以在全球的用户组和会议中看到她对数据访问和其他主题的介绍。她的博客地址是 thedatafarm.com/blog。她是“Entity Framework 编程”及其 Code First 和 DbContext 版本(全都出版自 O’Reilly Media)的作者。通过 Twitter 关注她:@julielerman 并在 juliel.me/PS-Videos 上观看其 Pluralsight 课程。


衷心感谢以下 Microsoft 技术专家对本文的审阅: Kevin Cunnane、Eric Kang 和 Sanjay Nagamangalam

原文地址:https://msdn.microsoft.com/zh-cn/magazine/mt809115


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/324570.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

binarySearch与IndexOf的那些事儿~

大家好,我是雄雄,今天我们来看看java中的binarySearch方法!我们都知道,如果我们想要在一个集合中查找某个元素所在的位置时,可以使用list类自带的indexOf方法,简单方便还快捷。不过,Collections…

两张趣图助你理解 HTTP 状态码

转载自 两张趣图助你理解 HTTP 状态码 HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码。 我们可以通过查看HTTP状态码来判断服务器状态,常见的有404 、502等;但是其他不是很常见的状态码都代表什…

Java中的binarySearch方法

大家好,我是雄雄,今天我们来看看java中的binarySearch方法! 前言:我们都知道,如果我们想要在一个集合中查找某个元素所在的位置时,可以使用list类自带的indexOf方法,简单方便还快捷。不过&…

ASP.NET Core 开源论坛项目 NETCoreBBS

ASP.NET Core 轻量化开源论坛项目,ASP.NET Core Light forum NETCoreBBS 采用 ASP.NET Core EF Core Sqlite Bootstrap 开发。 GitHub: https://github.com/linezero/NETCoreBBS 开发 git clone https://github.com/linezero/NETCoreBBS.git使用 Visual Studi…

使用相对长度单位em布局网页内容

顺便问一下哈?那个辣椒酱大家感觉怎么样,你们也买了也尝了,是不是该反馈反馈啦~~如果还有想要的,可以联系我呐!原文地址:自从有了这款辣椒酱,拌饭再也不用老干妈前言:在页面开发中&a…

史上最全的 MySQL 高性能优化实战总结

转载自 史上最全的 MySQL 高性能优化实战总结 一、前言 MySQL 对于很多 Linux 从业者而言,是一个非常棘手的问题,多数情况都是因为对数据库出现问题的情况和处理思路不清晰。在进行 MySQL 的优化之前必须要了解的就是 MySQL 的查询过程,很…

.NET Core快速入门教程 3、我的第一个.NET Core App (CentOS篇)

一、前言 本篇开发环境?1、操作系统:CentOS7(因为ken比较偏爱CentOS7)2、SDK版本:.NET Core 2.0 Preview你可能需要的前置知识1、了解如何通过Hyper-V安装CentOS虚拟机2、了解CentOS7基础命令/常用命令 二、安装 .NE…

RPC(远程过程调用)

1、RPC和HTTP对比 1.1 具体实现 RPC:可以基于TCP协议,也可以基于HTTP协议。 HTTP:基于HTTP协议 1.2 效率 RPC:自定义具体实现可以减少很多无用的报文内容,使得报文体积更小。 HTTP:如果是HTTP 1.1 报文中很…

【2018.3.24】模拟赛之四-ssl2548 旋转【暴力模拟】

正题 大意 给出一块黑块和白块组成的版&#xff0c;将其旋转90后和之前的黑块叠加&#xff0c;求最初始和每次旋转后的黑块数。 解题思路 暴力模拟不解释 代码 #include<cstdio> #include<iostream> using namespace std; int n,s; char c[51][51],a[51][51];…

使用相对长度单位rem布局网页内容

前言&#xff1a;上篇我们提到了相对单位em的用法&#xff0c;知道了em的概念&#xff0c;即是一个相对的单位&#xff0c;也知道了em的值不是固定的&#xff0c;p标签里的em和p里面的div下面的1em的px值并不是一样的。具体是多少呢&#xff1f;那就得看一下父级元素的值了&…

告诉你,Spring Boot 真是个牛逼货

转载自 告诉你&#xff0c;Spring Boot 真是个牛逼货 现在 Spring Boot 非常火&#xff0c;各种技术文章&#xff0c;各种付费教程&#xff0c;多如牛毛&#xff0c;可能还有些不知道 Spring Boot 的&#xff0c;那它到底是什么呢&#xff1f;有什么用&#xff1f;今天给大家…

集合还有这么优雅的运算法?

前言&#xff1a;在初中数学&#xff0c;我们也有集合的概念&#xff0c;非但如此&#xff0c;还有集合中的一些运算&#xff0c;例如交集、并集、差集等&#xff0c;那么我们java中的集合是否有这样的运算呢&#xff1f;今天我们就一起来看看&#xff01;01并集就是将两个集合…

.NET Core快速入门教程 2、我的第一个.NET Core App(Windows篇)

一、前言 本篇开发环境&#xff1f;1、操作系统&#xff1a; Windows 10 X642、SDK&#xff1a; .NET Core 2.0 Preview 二、安装 .NET Core SDK 1、下载 .NET Core下载地址&#xff1a;https://www.microsoft.com/net/download/core根据自己电脑情况选择对应版本即可.NET C…

【2018.3.24】模拟赛之六-ssl2550 重要人物【图论,最短路,SPFA】

正题 大意 有一个大人物&#xff0c;它要从经过一些地方&#xff0c;他所在的路会被封闭&#xff08;不可以进入&#xff0c;可以出&#xff09;。你要从一个点到到另一个点&#xff0c;求最短时间。 解题思路 求出每条路的封闭时间&#xff0c;然后SPFA 代码 #include<…

今天 ,给大家变个魔术!!!

前言&#xff1a;在对网页进行布局时&#xff0c;当我们设置div的的宽为固定宽时&#xff0c;理论上&#xff0c;内容是不会超出div的&#xff0c;那你有没有见过内容超出div固定宽度的情况呢&#xff1f;今天我们就来看看到底是怎么一回事&#xff1f;看分析之前&#xff0c;我…

Google的面试题长啥样

转载自 Google的面试题长啥样 本文翻译自Google工程师/面试官Alex Golec的文章&#xff1a;Google Interview Questions Deconstructed: The Knight’s Dialer&#xff1b; 来源&#xff1a;实验楼&#xff0c;翻译&#xff1a;实验楼扫地阿姨 原文&#xff1a;https://medium…

Autofac+Castle实现AOP事务

一、前言 最近公司新项目&#xff0c;需要搭架构进行开发&#xff0c;其中需要保证事务的一致性&#xff0c;经过一番查找&#xff0c;发现很多博文都是通过Spring.Net、Unity、PostSharp、Castle Windsor这些方式实现AOP的。但是这不是我想要的&#xff0c;因此一番查找后&am…

今天,我们就来抽个奖!

前言&#xff1a;在日常生活中&#xff0c;我们经常会用到一些抽奖的功能&#xff0c;比如公司年会上的抽奖环节&#xff0c;班级随机点名回答问题的小程序&#xff0c;随机点名系统的程序可以看这里&#xff1a;&#xff0c;那你知道类似的抽奖功能是怎么实现的吗&#xff1f;…

Spring Boot 最核心的 3 个注解详解

转载自 Spring Boot 最核心的 3 个注解详解 最近面试一些 Java 开发者&#xff0c;他们其中有些在公司实际用过 Spring Boot, 有些是自己兴趣爱好在业余自己学习过。 然而&#xff0c;当我问他们 Spring Boot 最核心的 3 个注解是什么&#xff0c;令我失望的是鲜有人能答上来…

刚刚,改造了下BaseDao……

今天在上课的时候&#xff0c;带着学生们写底层的jdbc连接数据库并且对数据表进行增删改查&#xff0c;写的那就一个痛苦啊……从创建实体类到写Dao层代码再到表现层的Jsp页面&#xff0c; 写了好久好久……终于写完了&#xff01;&#xff01;&#xff01;其实吧&#xff0…