You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
MultiThreadingStudy/Docs/Jupyter笔记.1.2.连接数据库.ipynb

855 lines
22 KiB
Plaintext

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

{
"cells": [
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"source": [
"连接数据库\n",
"============================== "
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"source": [
"连接到SQL Server,并操作数据。"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"source": [
"## 引用操作类库"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div><div></div><div></div><div><strong>Installed Packages</strong><ul><li><span>Microsoft.Dotnet.Interactive.SqlServer, 1.0.0-beta.23165.2</span></li></ul></div></div>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"Loading extensions from `C:\\Users\\ruyu\\.nuget\\packages\\microsoft.dotnet.interactive.sqlserver\\1.0.0-beta.23165.2\\interactive-extensions\\dotnet\\Microsoft.DotNet.Interactive.SqlServer.dll`"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<details><summary>Query Microsoft SQL Server databases.</summary>\r\n",
"<p>This extension adds support for connecting to Microsoft SQL Server databases using the <code>#!connect mssql</code> magic command. For more information, run a cell using the <code>#!sql</code> magic command.</p>\r\n",
"</details>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#r \"nuget:Microsoft.Dotnet.Interactive.SqlServer,*-*\""
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"source": [
"## 连接到SQL Server"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"source": [
"### 数据库连接命令"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"source": [
"#### 命令概述: 使用帮助参数"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"source": [
"数据库连接命令为 `#!connect` 查看连接帮助 `#!connect -h`"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"outputs": [],
"source": [
"#!connect -h"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"source": [
"#### 连接到本机SQL Server"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"source": [
"1. 建立连接"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"source": [
"> 连接到本机SQL Server, 特别注意的是 --kernel-name 指定名称后面的SQL操作均需要使用sql-{{kernel-name}}的值\n",
"> 比如 --kernel-name Demo, 则该SQL连接的kernel名称为 sql-Demo, 使用 #!sql-Demo 进行引用"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"outputs": [
{
"data": {
"text/plain": [
"Kernel added: #!sql-Demo"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#!connect mssql \"server=.\\SQL2008;uid=sa;pwd=gly-bicijinlian;database=Study;Encrypt=True;TrustServerCertificate=True;\" --kernel-name Demo\n",
"//重复执行会抛出错误,目前没有找到解决方法"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"source": [
"2. 使用连接: 方式一"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"source": [
"> 在右下角,切换 Kernel, 由 `csharp - C# Script` 换成 由--kernel-name指定值生成的 `sql-Demo - T-SQL`"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"dotnet_interactive": {
"language": "sql-Demo"
},
"polyglot_notebook": {
"kernelName": "sql-Demo"
}
},
"outputs": [
{
"data": {
"text/plain": [
"(2 行受到影响)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/csv": [
"Id,Name,Age,Address,School,Grade,Room\r\n",
"1,王明明,5,五星小区21号301,太康一高,一年级,\r\n",
"2,张三丰,9,,太康一高,一年级,\r\n"
],
"text/html": [
"<table><thead><tr><td><span>Id</span></td><td><span>Name</span></td><td><span>Age</span></td><td><span>Address</span></td><td><span>School</span></td><td><span>Grade</span></td><td><span>Room</span></td></tr></thead><tbody><tr><td><div class=\"dni-plaintext\"><pre>1</pre></div></td><td>王明明</td><td><div class=\"dni-plaintext\"><pre>5</pre></div></td><td>五星小区21号301</td><td>太康一高</td><td>一年级</td><td></td></tr><tr><td><div class=\"dni-plaintext\"><pre>2</pre></div></td><td>张三丰</td><td><div class=\"dni-plaintext\"><pre>9</pre></div></td><td></td><td>太康一高</td><td>一年级</td><td></td></tr></tbody></table><style>\r\n",
".dni-code-hint {\r\n",
" font-style: italic;\r\n",
" overflow: hidden;\r\n",
" white-space: nowrap;\r\n",
"}\r\n",
".dni-treeview {\r\n",
" white-space: nowrap;\r\n",
"}\r\n",
".dni-treeview td {\r\n",
" vertical-align: top;\r\n",
" text-align: start;\r\n",
"}\r\n",
"details.dni-treeview {\r\n",
" padding-left: 1em;\r\n",
"}\r\n",
"table td {\r\n",
" text-align: start;\r\n",
"}\r\n",
"table tr { \r\n",
" vertical-align: top; \r\n",
" margin: 0em 0px;\r\n",
"}\r\n",
"table tr td pre \r\n",
"{ \r\n",
" vertical-align: top !important; \r\n",
" margin: 0em 0px !important;\r\n",
"} \r\n",
"table th {\r\n",
" text-align: start;\r\n",
"}\r\n",
"</style>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"SELECT * from Student"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"source": [
"2. 使用连接:方式二(推荐)"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"source": [
"> 使用 `#!sql-Demo` ,后面直接写SQL语句不用切换 kernel "
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"outputs": [
{
"data": {
"text/plain": [
"(2 行受到影响)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/csv": [
"Id,Name,Age,Address,School,Grade,Room\r\n",
"1,王明明,5,五星小区21号301,太康一高,一年级,\r\n",
"2,张三丰,9,,太康一高,一年级,\r\n"
],
"text/html": [
"<table><thead><tr><td><span>Id</span></td><td><span>Name</span></td><td><span>Age</span></td><td><span>Address</span></td><td><span>School</span></td><td><span>Grade</span></td><td><span>Room</span></td></tr></thead><tbody><tr><td><div class=\"dni-plaintext\"><pre>1</pre></div></td><td>王明明</td><td><div class=\"dni-plaintext\"><pre>5</pre></div></td><td>五星小区21号301</td><td>太康一高</td><td>一年级</td><td></td></tr><tr><td><div class=\"dni-plaintext\"><pre>2</pre></div></td><td>张三丰</td><td><div class=\"dni-plaintext\"><pre>9</pre></div></td><td></td><td>太康一高</td><td>一年级</td><td></td></tr></tbody></table><style>\r\n",
".dni-code-hint {\r\n",
" font-style: italic;\r\n",
" overflow: hidden;\r\n",
" white-space: nowrap;\r\n",
"}\r\n",
".dni-treeview {\r\n",
" white-space: nowrap;\r\n",
"}\r\n",
".dni-treeview td {\r\n",
" vertical-align: top;\r\n",
" text-align: start;\r\n",
"}\r\n",
"details.dni-treeview {\r\n",
" padding-left: 1em;\r\n",
"}\r\n",
"table td {\r\n",
" text-align: start;\r\n",
"}\r\n",
"table tr { \r\n",
" vertical-align: top; \r\n",
" margin: 0em 0px;\r\n",
"}\r\n",
"table tr td pre \r\n",
"{ \r\n",
" vertical-align: top !important; \r\n",
" margin: 0em 0px !important;\r\n",
"} \r\n",
"table th {\r\n",
" text-align: start;\r\n",
"}\r\n",
"</style>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#!sql-Demo\n",
"SELECT * from Student"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"source": [
"## 使用 EF Core"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"source": [
"### 新连接: 添加 --create-dbcontext 参数"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"outputs": [
{
"data": {
"text/markdown": [
"Scaffolding a `DbContext` and initializing an instance of it called `DemoEF` in the C# kernel."
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div><div></div><div></div><div><strong>Installed Packages</strong><ul><li><span>Humanizer, 2.14.1</span></li><li><span>humanizer.core, 2.14.1</span></li><li><span>Microsoft.EntityFrameworkCore.Design, 7.0.0</span></li><li><span>microsoft.entityframeworkcore.sqlserver, 7.0.0</span></li><li><span>microsoft.identity.client, 4.48.1</span></li></ul></div></div>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Security Warning: The negotiated TLS 1.0 is an insecure protocol and is supported for backward compatibility only. The recommended protocol version is TLS 1.2 and later.\r\n"
]
},
{
"data": {
"text/plain": [
"Kernel added: #!sql-DemoEF"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#!connect mssql \"server=.\\SQL2008;uid=sa;pwd=gly-bicijinlian;database=Study;Encrypt=True;TrustServerCertificate=True;\" --create-dbcontext --kernel-name DemoEF "
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"source": [
"上面的连接操作,会执行下面的任务:\n",
"+ 搭建EFCore基架,并初始化 DBContext 的实例: DemoEF\n",
"+ 安装包相关Nuget包,详情见输出\n",
"+ 添加新的子内核 #!sql-DemoEF"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"source": [
"### 使用EFCore连接: 操作数据"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"source": [
"#### 类SQL脚本方式"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"outputs": [
{
"data": {
"text/plain": [
"(2 行受到影响)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/csv": [
"Id,Name,Age,Address,School,Grade,Room\r\n",
"1,王明明,5,五星小区21号301,太康一高,一年级,\r\n",
"2,张三丰,9,,太康一高,一年级,\r\n"
],
"text/html": [
"<table><thead><tr><td><span>Id</span></td><td><span>Name</span></td><td><span>Age</span></td><td><span>Address</span></td><td><span>School</span></td><td><span>Grade</span></td><td><span>Room</span></td></tr></thead><tbody><tr><td><div class=\"dni-plaintext\"><pre>1</pre></div></td><td>王明明</td><td><div class=\"dni-plaintext\"><pre>5</pre></div></td><td>五星小区21号301</td><td>太康一高</td><td>一年级</td><td></td></tr><tr><td><div class=\"dni-plaintext\"><pre>2</pre></div></td><td>张三丰</td><td><div class=\"dni-plaintext\"><pre>9</pre></div></td><td></td><td>太康一高</td><td>一年级</td><td></td></tr></tbody></table><style>\r\n",
".dni-code-hint {\r\n",
" font-style: italic;\r\n",
" overflow: hidden;\r\n",
" white-space: nowrap;\r\n",
"}\r\n",
".dni-treeview {\r\n",
" white-space: nowrap;\r\n",
"}\r\n",
".dni-treeview td {\r\n",
" vertical-align: top;\r\n",
" text-align: start;\r\n",
"}\r\n",
"details.dni-treeview {\r\n",
" padding-left: 1em;\r\n",
"}\r\n",
"table td {\r\n",
" text-align: start;\r\n",
"}\r\n",
"table tr { \r\n",
" vertical-align: top; \r\n",
" margin: 0em 0px;\r\n",
"}\r\n",
"table tr td pre \r\n",
"{ \r\n",
" vertical-align: top !important; \r\n",
" margin: 0em 0px !important;\r\n",
"} \r\n",
"table th {\r\n",
" text-align: start;\r\n",
"}\r\n",
"</style>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#!sql-DemoEF\n",
"SELECT * from Student"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"source": [
"#### C#程序中使用EF Core"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"outputs": [
{
"data": {
"text/html": [
"<table><thead><tr><th><i>index</i></th><th>value</th></tr></thead><tbody><tr><td>0</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>Submission#4+Student</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Id</td><td><div class=\"dni-plaintext\"><pre>1</pre></div></td></tr><tr><td>Name</td><td>王明明</td></tr><tr><td>Age</td><td><div class=\"dni-plaintext\"><pre>5</pre></div></td></tr><tr><td>Address</td><td>五星小区21号301</td></tr><tr><td>School</td><td>太康一高</td></tr><tr><td>Grade</td><td>一年级</td></tr><tr><td>Room</td><td></td></tr></tbody></table></div></details></td></tr><tr><td>1</td><td><details class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>Submission#4+Student</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Id</td><td><div class=\"dni-plaintext\"><pre>2</pre></div></td></tr><tr><td>Name</td><td>张三丰</td></tr><tr><td>Age</td><td><div class=\"dni-plaintext\"><pre>9</pre></div></td></tr><tr><td>Address</td><td></td></tr><tr><td>School</td><td>太康一高</td></tr><tr><td>Grade</td><td>一年级</td></tr><tr><td>Room</td><td></td></tr></tbody></table></div></details></td></tr></tbody></table><style>\r\n",
".dni-code-hint {\r\n",
" font-style: italic;\r\n",
" overflow: hidden;\r\n",
" white-space: nowrap;\r\n",
"}\r\n",
".dni-treeview {\r\n",
" white-space: nowrap;\r\n",
"}\r\n",
".dni-treeview td {\r\n",
" vertical-align: top;\r\n",
" text-align: start;\r\n",
"}\r\n",
"details.dni-treeview {\r\n",
" padding-left: 1em;\r\n",
"}\r\n",
"table td {\r\n",
" text-align: start;\r\n",
"}\r\n",
"table tr { \r\n",
" vertical-align: top; \r\n",
" margin: 0em 0px;\r\n",
"}\r\n",
"table tr td pre \r\n",
"{ \r\n",
" vertical-align: top !important; \r\n",
" margin: 0em 0px !important;\r\n",
"} \r\n",
"table th {\r\n",
" text-align: start;\r\n",
"}\r\n",
"</style>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div class=\"dni-plaintext\"><pre>-1</pre></div><style>\r\n",
".dni-code-hint {\r\n",
" font-style: italic;\r\n",
" overflow: hidden;\r\n",
" white-space: nowrap;\r\n",
"}\r\n",
".dni-treeview {\r\n",
" white-space: nowrap;\r\n",
"}\r\n",
".dni-treeview td {\r\n",
" vertical-align: top;\r\n",
" text-align: start;\r\n",
"}\r\n",
"details.dni-treeview {\r\n",
" padding-left: 1em;\r\n",
"}\r\n",
"table td {\r\n",
" text-align: start;\r\n",
"}\r\n",
"table tr { \r\n",
" vertical-align: top; \r\n",
" margin: 0em 0px;\r\n",
"}\r\n",
"table tr td pre \r\n",
"{ \r\n",
" vertical-align: top !important; \r\n",
" margin: 0em 0px !important;\r\n",
"} \r\n",
"table th {\r\n",
" text-align: start;\r\n",
"}\r\n",
"</style>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"//连接建立后执行环境中就有了相关的类DBContext等\n",
"DemoEFContext context = new DemoEFContext();\n",
"var t = context.Students.ToList<Student>();\n",
"display(t);\n",
"\n",
"FormattableString fs = $\"select * from Student;\";\n",
"var c = context.Database.ExecuteSql(fs);\n",
"display(c);"
]
}
],
"metadata": {
"kernelspec": {
"display_name": ".NET (C#)",
"language": "C#",
"name": ".net-csharp"
},
"language_info": {
"name": "polyglot-notebook"
},
"polyglot_notebook": {
"kernelInfo": {
"defaultKernelName": "csharp",
"items": [
{
"aliases": [],
"name": ".NET"
},
{
"aliases": [
"C#",
"c#"
],
"languageName": "C#",
"name": "csharp"
},
{
"aliases": [
"F#",
"f#"
],
"languageName": "F#",
"name": "fsharp"
},
{
"aliases": [],
"languageName": "HTML",
"name": "html"
},
{
"aliases": [],
"languageName": "KQL",
"name": "kql"
},
{
"aliases": [],
"languageName": "Mermaid",
"name": "mermaid"
},
{
"aliases": [
"powershell"
],
"languageName": "PowerShell",
"name": "pwsh"
},
{
"aliases": [],
"languageName": "SQL",
"name": "sql"
},
{
"aliases": [],
"languageName": "T-SQL",
"name": "sql-Demo"
},
{
"aliases": [],
"languageName": "T-SQL",
"name": "sql-DemoEF"
},
{
"aliases": [],
"name": "value"
},
{
"aliases": [
"frontend"
],
"name": "vscode"
}
]
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}