标记存档:vscode

新Pluralsight课程:在Win上与Visual Studio代码中的SQL Server数据交互,Mac,Linux

图像我最近上的多元视觉课,跨平台的SQL Server管理开发人员使用VS代码,这个月早些时候上线了(就在我准备登机参加为期两周的会议旅行的时候!)

这是一门关于Visual Studio代码扩展的课程,我非常喜欢使用它,所以想与您分享。它是mssql扩展,允许您以一种相当丰富的方式与SQL Server交互,这掩盖了它所扩展的IDE的轻便性。因为vs代码是跨平台,它的所有扩展也是如此。所以你可以在Windows上编程的时候使用这个,并希望与SQL Server数据库进行一些基本的交互。

作为SQL Server的例子,我在Windows上使用了SQL Server LocalDB,Mac上Docker容器中的Linux SQL Server和云上的Azure SQL。本课程不仅向您展示如何安装VS代码(以及一些VS代码基础知识)和扩展,而且还将向您介绍如何设置每个数据库服务器。这意味着它也有关于Docker的一课,安装并运行一个映像,以及在Azure门户中快速创建一个新的SQL数据库。

一旦一切就绪,我深入了解了MSSQL扩展的特性和功能。我翻遍了所有可能的石头,以确保你不会错过有用的功能,这是一个规范,如果你只是开始使用这样的工具没有任何准备。

本课程主要是演示,非常简单地介绍PowerPoint幻灯片,我在Windows中工作,在我的MacBook上,甚至在Linux虚拟机上。

图像我为这门课感到骄傲的是,如果你从未使用过VS代码,您将学习如何绕过这个了不起的编辑器。如果你从未使用过Docker,我提供了一个非常有帮助和温和的介绍,你将能够与它一起工作。我得到了负责这个扩展的团队的大力支持,因为他们很高兴能得到这种关注。

所以不管你用什么语言编码,无论你做什么工作,如果您正在使用SQL Server(或有兴趣使用它),这门课程应该对掌握这个非常方便的扩展有很大帮助!

下面是课程的目录。

如果你需要一个30天的免费试用期到多元化图书馆,这样你就可以看这个了,给我寄张便条


模块1:介绍和安装VS代码和mssql扩展

在本模块中,您将简要介绍跨平台和免费的开发人员IDE,Visual Studio代码及其mssql扩展,扩展允许您在不离开IDE的情况下与SQL Server数据库执行一些键交互。您还将在Windows和MacOS上演示如何安装IDE和扩展。

  • 模块和课程概述
  • 介绍Visual Studio代码和mssql扩展
  • 在Windows上安装Visual Studio代码
  • 在MacOS上安装Visual Studio代码
  • 介绍Visual Studio代码的编码超能力
  • 在VS代码中安装mssql扩展

模块2:为任何平台准备SQL Server,本地和云中

在这个模块中,您将学习如何设置各种SQL服务器。它们都可以快速安装。您将学习在Windows上安装SQL Server LocalDB,在云中创建一个Azure SQL数据库,并使用一个用于Linux的Docker SQL Server映像来快速启动macOS容器中的SQL Server。这将确保您在余下的课程中有一个SQL Server数据库可以与之交互。

  • SQL Server LocalDB:最简单的SQL服务器
  • 在云中设置Azure SQL数据库
  • 验证新的Azure SQL数据库
  • 设置Azure SQL数据库的最后详细信息
  • 使用Docker容器在任何O/S上承载SQL Server for Linux
  • 安装Docker并运行SQL Server容器
  • 验证容器化数据库
  • 理解容器中的持久性和缺乏持久性
  • 使用示例数据库获取自定义图像

模块3:从各种平台连接到各种SQL服务器

在这个模块中,你会学到如何与当地各种各样的人联系,带有mssql扩展的云和容器化SQL服务器。您将学习如何使用命令和快捷方式,如何存储连接配置文件和密码,甚至如何创建方便的快捷方式来启动MSSQL。

  • mssql的命令和执行引擎
  • 连接到LocalDB,同时学习更多关于mssql连接的知识
  • 从Windows和macOS连接到Azure SQL
  • 演示mssql如何安全地存储您的密码
  • 使用ADO.NET连接字符串进行连接
  • 连接到Docker容器中的数据库
  • 连接键盘和状态栏快捷方式
  • 创建键盘快捷方式来启动mssql并连接

模块4:学习MSSQL基础知识进行连接,查询和创建

在这个模块中,你将开始与数据库交互,执行查询和命令,探索结果集。您将了解这些代码片段,还将了解如何附加到现有数据库文件和从头创建新数据库。最重要的是,您将了解mssql扩展带来的强大的SQL编辑器和结果视图支持。

  • 附加现有数据库文件
  • 与第一个查询的结果进行交互
  • 智能编辑器窗口
  • 使用代码片段加速命令构建
  • 进一步研究多个结果集
  • 使用代码片段查看数据库元数据
  • 创建数据库,表和数据

模块5:利用高级技巧

本模块将深入研究mssql,并提供一些技巧,不仅利用mssql的功能,以及Visual Studio代码的功能,使使用mssql更容易。

  • 导出结果到CSV,JSON或Excel
  • mssql消息的本地化
  • 通过vs代码的设置控制行为
  • 在编辑器窗口中设置代码格式
  • 结果窗口技巧,快捷键和设置
  • 检查最后几个设置
  • 在VS代码中创建自己的SQL代码片段
  • 展望Mac和Linux上的集成身份验证

Mashup:使用Visual Studio代码在Mac上的Docker中运行Linux上的SQL Server

我在Visual Studio代码的新mssql扩展中获得了很多乐趣。我有一篇文章即将在MSDN杂志和计划更多的乐趣。我最新的实验是做一个大的mashup,利用了现在有一个Linux版本的SQL Server这一事实。因此,我们不再局限于在Windows或Azure上托管它。在Linux上托管SQL Server的最轻量级方法是在Docker容器中。当我坐在一台MacBook电脑前打字时,我绝不打算放弃Windows开发或Windows机器。我只是很高兴我有更多的选择,以及有能力分享我正在学习的工作以外的Windows开发人员的世界。

容器没有状态。有很多方法可以解决这个问题(我将在下面向您展示),但是我只知道在这里很危险。这是一种在设计时使用SQL Server的好方法。将其用于生产是完全不同的情况,在使用该选项之前,您需要做更多的研究和自我反省。

另一方面,有些人确实有这样的目标:

我必须查阅大量的文件才能做到这一点,当然,即使我手头有这些资源,我还是被困住了。所以我将分享我如何使这个设置工作的完整路径。

先决条件

我的MacBook上已经安装了Docker for Mac。这里是安装链接如果需要执行这一步。请记住,您不能在虚拟机上执行此操作。我试着用一个干净的设置重复这个过程。

确保Docker被设置为至少使用4GB内存。

2017 - 04 - 07 - _13 55 - 27. jpg

获取SQL Server Docker映像

这就是使整个事情变得如此简单的原因!微软已经创建了一个官方的Docker镜像,上面已经有用于Linux的SQL Server。

在终端窗口,您可以拖拽并安装官方映像

sudo docker拉microsoft/mssql-server-linux

一旦安装好,“docker images”命令将显示该映像现在可以在您的机器上使用。

2017年4月7日

虽然我今天才安装,你可以看到我正在使用的图片——这是最新版本——是3周前由微软创建的。

从图像旋转一个或两个容器

现在Docker知道了这张照片,您可以从中创建一个容器——它正在运行映像的实例。

因为我们用的是Mac电脑等待“错误”固定,我们将创建两个容器。

取决于你对Docker的熟悉程度,您可能知道也可能不知道容器是没有状态的。一旦你删除了一个容器,一切都不见了!如果您已经将数据保存在该容器中,它,同样的,都是一去不复返了。然而,Docker有一个名为“volume”的特性这是一种在Docker实例之间保留状态的方法。所以当一个实例被关闭时,状态存储在卷中。当另一个容器实例被分离时,该卷为容器提供了前一个实例的状态。这就是为数据库使用容器的方法。

这里有一个关于卷的很好的教程:https://rominirani.com/docker-tutorial-series-part-7-data-volumes-93073a1b5b72
官方的docker doc:https://docs.docker.com/engine/tutorials/dockervolumes/#/creating-and-mounting-a-data-volume-container

但是,在托管SQL Server Linux映像的Mac上,Docker存在一个问题(看起来解决方案即将到来)。这使我们无法以简单的方式使用卷进行持久性。所以,我们将创建一个单独的容器,它是“数据卷容器”,然后,我们将把运行SQL Server的容器指向数据卷容器。

创建卷容器

我来命名我的mssqldata。这是创建它的命令。(不要错过命令的完整长度!)

docker create-v/var/opt/mssql--name mssqldata微软/ mssql-server-linux /bin/true

这个卷容器仍然使用图像作为其基础。但是我们不会从这个实例运行SQL Server。

创建SQL Server容器

现在,您可以创建一个容器,在其中运行SQL Server,该容器将使用数据卷容器来保存数据。

docker运行-e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Passw0rd' -p 1433:1433—volumes—from mssqldata -d—name sql-server microsoft/mssql-server-linux

需要两个环境变量(accept_eula和sa_password)。用户id是(gulp) ' sa'。密码要求是:“至少8个字符,包括大写,小写字母,以10为基数的数字和/或非字母数字符号。我真的很喜欢!

一旦这些存在,

码头工人

将只显示常规容器。卷容器是隐藏的,所以您需要

码头工人ps -

看到它。

2017 - 04 - 07 - _16 - 07 - 49. - jpg注意,我将运行SQL Server的容器位于端口上,而数据卷容器具有不同的状态“Created”,并且不暴露在端口上。

从SQL命令行测试连接

你不必这么做,但这让我很开心,很有趣。您知道可以从命令行与SQL Server交互吗?这些工具安装在容器中,但是使用起来很麻烦。直接将它们安装到您的计算机上更容易。Mac的命令行工具是sql-cli

注:5月16日微软发布了MacOS版本的sqlcmd和bcp(大容量复制)。很高兴知道您是否已经熟悉sqlcmd。下面是他们的博客文章。

你可以安装与:

NPM安装-G SQL CLI

使用mssql命令启动它。

您需要连接的最小值是标识服务器(默认位于localhost,您不需要指定端口)和密码。它将假定用户ID为sa。

mssql -s localhost -p Passw0rd

如果它是成功的,你会得到一些信息,然后有一个新的提示,该软件。

正在连接到本地主机…完成0.4.14 sql-cli版本输入“.help”使用提示。该软件>

足够的。现在我开始使用我最喜欢的新工具。这个Visual Studio代码中的MSSQL扩展

在Visual Studio代码中连接

一旦在VS代码中安装了mssql,您可以从创建一个新的sql文件开始。或者通过命令(命令pallete的f1,用MS SQL查看命令,然后新建查询。这将提示您输入一个连接—一次一个参数。您还可以从MS SQL Connect命令(C)开始。扩展将提示您输入每个参数。

服务器名:localhost数据库名:(输入)用户名:sa密码:Passw0rd保存密码(是或否)配置文件名:[您的选择]

如果你输入正确,它不仅能连接,但是,在VS代码设置中,详细信息将作为连接配置文件存储,并可用于后续连接。

您可以在连接时以及在IDE右下角连接时看到连接状态。

2017 - 04 - 07 - _18 19 - 37. jpg

在编辑器中打开的SQL文件中,您可以键入SQL并查看一些现有的代码片段,还可以从IntelliSense获得帮助,IntelliSense已经读取了服务器上的数据架构。到目前为止还没有多少。

选择sqlListDatabases片段然后执行它(右键单击上下文菜单上执行查询或⇧⌘E)显示数据库:

2017 - 04 - 07 - _18 - 22 - 45. jpg

现在你可以使用TSQL创建数据库,数据库对象,查询数据。在结果窗格中,您将看到数据作为一个网格,类似于您在SSMS中可能看到的网格。您还可以将结果导出到CSV或JSON。我最近写了一篇关于你可以用mssql做的所有很酷的事情的文章,将在2017年6月的MSDN杂志上发表。但它连接到一个SQL Azure数据库。同时,您可以转到扩展的docs(aka.ms/mssql marketplace)。

创建数据库和表

我让更多的代码片段帮助我创建一个数据库和一个表。

第一次是我改变了片段的sqlCreateDatabase创建一个新的数据库的数据库名称placholder称为LinuxReally然后执行与⇧⌘E。

重新运行select name from sys.databases命令表明新数据库现在在列表中。

接下来,我利用sqlCreateTable片段来帮助创建一个新表。我将这个表命名为DatabasesIKnow,并给它三个列

创建表dbo.databasesiknow(id int非空主键,--主键列databasename[nvarchar](50)不为空,KnowIt[一些]);

出于某种原因,创建此项时,IntelliSense缓存未自动刷新。可能是因为它是一个新的数据库。甚至mssql扩展的refresh intellisense cache命令也没有启动它。这次我选择了LinuxReally数据库,而不是默认情况下让扩展连接到master,通过断开和重新连接,我让它工作起来了。当我这么做的时候,我可以看到消息“更新IntelliSense…”在状态栏中。在我做完这些之后,每当我修改数据库模式时,智能感知就会自动刷新。

一旦我有了新的数据库,我可以执行"select * from dbo.DatabasesIKnow"并看到适当的结果。在我的例子中,因为我没有添加数据,没有争吵。但很明显,它是从我的桌子上读出来的。

2017 - 04 - 08 - _09 - 04 - 55. - jpg

取下SQL Server容器

现在是大型docker卷测试。我第一次从数据库断开连接在VS代码与⇧⌘E。然后我用两个命令停止并删除sql-server容器:

docker停止sql-server rm sql-server

但是我让数据卷容器(mssqldata)一直运行。

然后,我使用与前面相同的命令创建了一个新的容器实例:

docker运行-e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Passw0rd' -p 1433:1433—volumes—from mssqldata -d—name sql-server microsoft/mssql-server-linux

在VS代码中,我认为重新连接到服务器和我的新数据库很容易,因为它已经存储在连接配置文件中。这是第一个,localhost: LinuxReally。

2017 - 04 - 08 - _09 - 11 - 50. - jpg

连接成功,列表数据库显示了我的新DatabasesIKnow数据库。Select *显示了模式。因此,即使我已经杀死并重新创建了sql server容器,我的数据库仍然保存在数据卷容器中。

下一个测试:取下两个容器。

现在是时候看看当我停下来取下两个容器时会发生什么了!

Docker停止SQL ServerDocker RM SQL服务器码头工人停止mssqldata码头工人rm mssqldata

接下来,我使用之前使用的相同命令,用参数重新启动SQL Server容器,以使用(未运行)mssqldata卷容器。

docker运行-e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Passw0rd' -p 1433:1433—volumes—from mssqldata -d—name sql-server microsoft/mssql-server-linux

失败。我需要首先运行数据卷容器。不幸的是,我重新运行了create命令并覆盖了现有的容器,所以一切都失去了。很好的教训!

所以我从零开始。在全新的数据卷容器中,我重新创建了数据库和表。

更多的实验后,我意识到我误解了关于卷的码头工人文件。您可以创建数据卷容器的副本并删除这些副本。但你需要更像一个码头工人忍者。虽然你可以制作容器的各种副本,一旦你找到所有相关的卷,它不见了。这篇博客文章澄清了一些我对WRT创建/备份/恢复数据卷容器仍感到困惑的信息:tricksofthetrades.net/2016/03/14/docker-data-volumes/

因此,底线是您需要让数据卷容器以某种格式(原始的或某种形式的复制)运行。(我仍然很难相信它不会以某种方式存储为您可以重新运行的文件,所以一旦有人纠正我,我会立即更新它!)

窗户,Mac,Linux可以在Azure和Anwhere上托管Docker容器

如果你认为这只是在OS X上做的一些事情(因为这就是我要做的)..不不不!你知道现在Windows有Docker了吗?VS代码是跨平台的吗?这是在开发环境中快速启动和运行SQL Server的好方法。

2017 - 04 - 08 - _10 - 49 - 59. - jpg

正如我在Twitter上说的,将拖拽docker映像并旋转容器的体验与在windows上安装SQL Server的体验进行比较如下:

英孚的核心,postgres和camel cased标识表

PostgreSQL并不太喜欢camel-case。我不是专家,但至少我知道。

我在MacBook上用Visual Studio代码对EF Core做了另一次探索。通常我使用Jetbrain的数据报(数据库IDE)检查实际数据。但这次我想玩Visual Studio代码扩展名为“VSCODE数据库“它允许您在IDE中直接与MySQL和PostgreSQL交互。

有很多数据库扩展事实上:

图像

我已经在使用mssql扩展来处理vs代码中的SQL Server数据:

当我使用模板中的默认Web应用程序时,涉及ASP.NET标识,管理标识的上下文继承自Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityDbContext

IdentityDbContext有流畅的API代码来显式映射表名,这些表名与它们映射的实体的表名不同。而且这些名字都是驼色的。

数据报不介意camel大小写的标识表名,但vscode数据库在读取数据库为工具构建IntelliSense时不理解表名。当遇到驼峰格式的名称时,它会预测小写并抛出异常。谢伊罗詹斯基,谁维护npgsql PostgreSQL提供的EF和EF核心,向我解释说,如果该工具只是在名称周围加上引号,会没事的。

更新: vscode-database维护者已经修复了这个问题,现在您可以轻松地使用identity表……只需记住,在键入SQL时,在采用大小写混合的数据库对象周围加上引号。尽管目前安装程序还没有更新新的位。我只是暂时手动修复扩展文件。

如果你不想这么做,想要恒等表都是小写的,那么你可能仍然会发现我的破解方法很有用。

对于一个临时的解决方案,我想将它们改为小写,这样就可以获得vscode-database扩展的好处。

因为IdentityDbContext类在其中创建表名OnModelCreating覆盖,事实发生后我需要把这些名字改成小写。

如果您知道通过API的正确路径,那么很容易做到这一点。

这是我的dbContext类,它在我的ASP.NET核心应用程序中处理标识。我在基类(IdentityDbContext)已经更改了名称之后,将foreach子句添加到小写的名称中。

我获取由ApplicationDbContext指定的ToTable名称,然后将该名称重新应用为小写形式。

使用微软.aspnetcore.identity.entityframeworkcore;使用Microsoft.EntityFrameworkCore;使用WebApplication.Models;名称空间Web应用程序.data{公共applicationdbContext:标识dbContext
         
          {
          公共应用程序dbContext(dbContextOptions
          
           选项):
           基础(选项){}
           受保护的
           覆盖
           无效OnModelCreating(ModelBuilder生成器){
           基础.onModelCreating(生成器);
           //自定义ASP.NET标识模型,并根据需要重写默认值。
           例如,/ /可以重命名ASP.NET标识表名等。
           //调用base. onmodelcreation (builder)后添加自定义;
           //quick and dirty并不能处理所有的场景
           foreach(VAR实体)
           var currentTableName = build . entity (entity.Name). metada . relational ().TableName;builder.Entity (entity.Name) .ToTable (currentTableName.ToLower ());}}}}
          
         

vscode-database有一些很酷的智能感知功能。它有一些UX问题需要处理(或者可能我需要一些培训,以防万一我会提出一个问题),但是它是免费的,让我们在不需要完整IDE的时候在数据库上执行查询和命令。

Visual Studio代码片段,使编写EF内核变得更简单

我一直在用Visual Studio代码的用户代码段功能为了更容易地将一些我通常用于ef核心的代码放入我的文件中。例如,我有c片段,用于dbContext创建接受dbContextOptions参数的构造函数重载,配置或建模。我在EFCore命令依赖项和带有EFCore Tools的Tools部分中添加了json代码片段。

github.com/julielerman/efcoresippetsforvscorde

最后,我创建了一个github存储库来共享它们。因为您需要将CSharp片段添加到现有的CSharp片段中,并且与JSON相同,我把它们放在单独的csharp.json和json.json文件中,您可以从中复制并将我的代码片段传递到自己的文件中。

虽然说明在我刚刚链接到的用户定义代码片段页面上,TL;DR是:

从菜单中,选择代码,然后是首选项和用户代码片段

2016 - 10 - 30 - _11 - 56 - 58

这将打开一个片段文件列表。选择c作为c_片段,选择json作为json片段。粘贴到我的代码段中!

2016 - 10 - 30 - _11 - 57 - 25所示