新闻详情

新闻详情

首页 / 资讯中心 / 详情

SQL Server 与 C 开发入门(Windows):ADO.NET、Entity Framework 与列存储索引实战指南

发布时间:2026/9/25 3:32:19来源:尧图网络
SQL Server 与 C 开发入门(Windows):ADO.NET、Entity Framework 与列存储索引实战指南
示例工程数据库教程后端【免费下载链接】sql-server-samplesAzure Data SQL Samples - Official Microsoft GitHub Repository containing code samples for SQL Server, Azure SQL, Azure Synapse, and Azure SQL Edge项目地址https://gitcode.com/gh_mirrors/sq/sql-server-samples点击查看免费下载本指南基于微软官方 SQL Server 示例仓库中的 Windows 版 C# 入门教程系统讲解如何在 Windows 环境下使用 C# 连接 SQL Server 2016并通过三个可直接运行的控制台示例分别掌握ADO.NET 原生 CRUD、Entity Framework ORM CRUD以及列存储索引Columnstore性能优化三大核心技能。阅读并运行完本指南你将能够在 Visual Studio 中完成从连接字符串配置、建库建表、增删改查到列存储索引性能对比的完整开发闭环。输出文章关于本示例About this sample本教程对应的示例代码位于仓库的samples/tutorials/c#/Windows目录官方定位为 Windows 平台上「快速上手 C# SQL Server 开发」的入门示例其核心信息如下适用版本SQL Server 2016或更高版本覆盖工作负载使用 .NETADO.NET完成 CRUD增删改查使用 Entity Framework 完成 CRUD使用列存储索引Columnstore获得性能提升编程语言C#作者ajlam整个目录下共包含四个可直接运行的控制台项目其中前三个正是上述三种工作负载对应的示例第四个是面向云场景的附加示例项目目录技术要点SqlServerSample使用 ADO.NETSystem.Data.SqlClient完成数据库创建、建表与完整 CRUDSqlServerEFSample使用 Entity FrameworkDbContext以对象方式完成 CRUD 与关联操作SqlServerColumnstoreSample插入 500 万行数据对比列存储索引添加前后的查询性能SqlMIResilientCloudApp针对 Azure SQL Managed Instance 的瞬时故障重试弹性示例运行前的环境准备Before you begin要运行这些示例需要先准备以下软件环境SQL Server 2016或更高版本本地实例即可满足示例运行要求三个主示例的连接字符串默认指向localhost.NET Framework示例基于 .NET Framework 构建SqlMIResilientCloudApp的配置文件明确要求.NETFramework,Versionv4.7.2见samples/tutorials/c#/Windows/SqlMIResilientCloudApp/App.configEntity FrameworkSqlServerEFSample项目使用 EF 6 风格的System.Data.EntityAPI需要安装 Entity Framework 程序包Visual Studio用于打开、编译与调试示例程序官方教程基于 Visual Studio 的 F5 一键运行工作流设计。快速运行三步法在 Visual Studio 中打开对应的.csproj项目如SqlServerSample找到Program.cs将连接字符串中的用户名UserID和密码Password修改为你自己的 SQL Server 登录凭据直接按F5构建并运行程序对三个示例ADO.NET CRUD、EF CRUD、Columnstore重复上述两步即可逐一体验。示例一使用 ADO.NET 完成原生 CRUDSqlServerSample这是入门的第一课不借助任何 ORM直接使用 ADO.NET 的SqlConnection、SqlCommand、SqlDataReader与 SQL Server 交互。源码见samples/tutorials/c#/Windows/SqlServerSample/Program.cs。构建连接字符串示例使用SqlConnectionStringBuilder以强类型方式拼装连接字符串避免手写字符串的格式错误SqlConnectionStringBuilder builder new SqlConnectionStringBuilder(); builder.DataSource localhost; // update me builder.UserID sa; // update me builder.Password your_password; // update me builder.InitialCatalog master;其中DataSource是服务器地址本示例为localhostUserID/Password为登录账号InitialCatalog初始指向master系统库随后示例会在此基础上创建业务库。创建数据库与示例表连接成功后程序首先执行建库语句然后切换到新库SampleDB中建表并插入三条初始数据DROP DATABASE IF EXISTS [SampleDB]; CREATE DATABASE [SampleDB]USE SampleDB; CREATE TABLE Employees ( Id INT IDENTITY(1,1) NOT NULL PRIMARY KEY, Name NVARCHAR(50), Location NVARCHAR(50) ); INSERT INTO Employees (Name, Location) VALUES (NJared, NAustralia), (NNikita, NIndia), (NTom, NGermany);注意Name、Location均使用NVARCHAR类型且中文字符串带N前缀——这是面向 SQL Server 存储 Unicode 数据的标准做法。参数化增删改查示例最值得借鉴的是全程使用参数化查询name、location等占位符配合command.Parameters.AddWithValue这既能避免 SQL 注入风险也是企业级 ADO.NET 代码的规范写法。INSERT插入sb.Append(INSERT Employees (Name, Location) ); sb.Append(VALUES (name, location);); using (SqlCommand command new SqlCommand(sql, connection)) { command.Parameters.AddWithValue(name, Jake); command.Parameters.AddWithValue(location, United States); int rowsAffected command.ExecuteNonQuery(); Console.WriteLine(rowsAffected row(s) inserted); }UPDATE更新String userToUpdate Nikita; sb.Append(UPDATE Employees SET Location NUnited States WHERE Name name); command.Parameters.AddWithValue(name, userToUpdate); int rowsAffected command.ExecuteNonQuery();DELETE删除String userToDelete Jared; sb.Append(DELETE FROM Employees WHERE Name name;); command.Parameters.AddWithValue(name, userToDelete); int rowsAffected command.ExecuteNonQuery();SELECT查询使用ExecuteReader()返回SqlDataReader通过列索引读取结果sql SELECT Id, Name, Location FROM Employees;; using (SqlCommand command new SqlCommand(sql, connection)) { using (SqlDataReader reader command.ExecuteReader()) { while (reader.Read()) { Console.WriteLine({0} {1} {2}, reader.GetInt32(0), reader.GetString(1), reader.GetString(2)); } } }整个流程被包裹在try/catch (SqlException e)中连接与命令对象均使用using确保资源及时释放——这也是编写 ADO.NET 代码必须养成的两个习惯。示例二使用 Entity Framework 完成 CRUD 与关联操作SqlServerEFSample第二个示例展示如何用 Entity Framework 摆脱手写 SQL以纯 C# 对象的方式操作数据库。源码涉及四个文件Program.cs主流程、EFSampleContext.csDbContext 上下文、User.cs与Task.cs实体类全部位于samples/tutorials/c#/Windows/SqlServerEFSample目录。定义实体与上下文User与Task是两个普通 POCO 类User包含UserId、FirstName、LastName并通过virtual IListTask Tasks声明一对多关系Task包含TaskId、Title、DueDate、IsComplete并通过virtual User AssignedTo声明外键导航属性注意virtual关键字是 EF 延迟加载Lazy Loading所必需的。EFSampleContext继承DbContext通过两个DbSet属性将实体映射到表public class EFSampleContext : DbContext { public EFSampleContext(string connectionString) { Database.SetInitializerEFSampleContext(new DropCreateDatabaseAlwaysEFSampleContext()); this.Database.Connection.ConnectionString connectionString; } public DbSetUser Users { get; set; } public DbSetTask Tasks { get; set; } }其中DropCreateDatabaseAlways初始化策略意味着每次运行时都会重建数据库结构——非常适合演示但生产环境应替换为CreateDatabaseIfNotExists或迁移Migration方案。对象化 CRUD 全流程主程序Program.cs用同一套连接字符串构造上下文然后依次演示五种操作Create创建直接new出实体对象加入DbSet后调用SaveChanges()持久化User newUser new User { FirstName Anna, LastName Shrestinian }; context.Users.Add(newUser); context.SaveChanges(); Task newTask new Task() { Title Ship Helsinki, IsComplete false, DueDate DateTime.ParseExact(04-01-2017, MM-dd-yyyy, CultureInfo.InvariantCulture) }; context.Tasks.Add(newTask); context.SaveChanges();Association关联将任务指派给用户只需设置导航属性即可EF 会自动维护外键newTask.AssignedTo newUser; context.SaveChanges();Read查询使用 LINQ 查询「分配给 Anna 的未完成任务」——这是 EF 最常用的查询姿势var query from t in context.Tasks where t.IsComplete false t.AssignedTo.FirstName.Equals(Anna) select t;Update更新取出实体、改属性、再SaveChanges()Task taskToUpdate context.Tasks.First(); taskToUpdate.DueDate DateTime.ParseExact(06-30-2016, MM-dd-yyyy, CultureInfo.InvariantCulture); context.SaveChanges();Delete删除先 LINQ 筛选出 2016 年到期的任务逐个Remove后统一提交var query from t in context.Tasks where t.DueDate dueDate2016 select t; foreach (Task t in query) { context.Tasks.Remove(t); } context.SaveChanges();对比示例一可以看出ADO.NET 需要你手写每一条 SQL 并手动管理参数而 EF 把这一切抽象为对象操作与SaveChanges()开发效率更高代价是需要理解实体映射与初始化策略等 EF 概念。示例三用列存储索引实现性能跃升SqlServerColumnstoreSample第三个示例演示 SQL Server 2016 的列存储索引Columnstore对分析型聚合查询的加速效果是学习 SQL Server 性能调优的绝佳入门材料。源码见samples/tutorials/c#/Windows/SqlServerColumnstoreSample/Program.cs。生成 500 万行测试数据程序先建库然后用一条巧妙的 CTE 交叉连接 SQLVALUES构造 10 个数字8 个自连接展开为 10⁸ 行再TOP(5000000)截取批量生成 500 万行测试数据USE SampleDB; WITH a AS (SELECT * FROM (VALUES(1),(2),(3),(4),(5),(6),(7),(8),(9),(10)) AS a(a)) SELECT TOP(5000000) ROW_NUMBER() OVER (ORDER BY a.a) AS OrderItemId, a.a b.a c.a d.a e.a f.a g.a h.a AS OrderId, a.a * 10 AS Price, CONCAT(a.a, N , b.a, N , c.a, N , d.a, N , e.a, N , f.a, N , g.a, N , h.a) AS ProductName INTO Table_with_5M_rows FROM a, a AS b, a AS c, a AS d, a AS e, a AS f, a AS g, a AS h;该语句在示例代码中被注释为「需要约 1 分钟」请耐心等待控制台提示完成。添加列存储索引前后的性能对比核心逻辑是一个SumPrice()方法对Table_with_5M_rows执行SELECT SUM(Price)用DateTime.Now.Ticks计算耗时并返回毫秒数。程序先执行一次无索引查询记录基线耗时然后添加列存储索引CREATE CLUSTERED COLUMNSTORE INDEX columnstoreindex ON Table_with_5M_rows;再执行同一条SUM(Price)查询最后打印性能提升倍数double elapsedTimeWithoutIndex SumPrice(connection); // ... CREATE CLUSTERED COLUMNSTORE INDEX ... double elapsedTimeWithIndex SumPrice(connection); Console.WriteLine(Performance improvement with columnstore index: Math.Round(elapsedTimeWithoutIndex / elapsedTimeWithIndex) x!);原理简析传统的行存储Rowstore按行组织数据聚合时需要逐行扫描而列存储将每一列的数据连续存放配合压缩与批处理执行Batch Mode对SUM、COUNT、AVG这类按列聚合的查询往往能带来数十倍甚至上百倍的加速。示例中程序会自动打印出实测的加速倍数如xxx x!这是验证列存储价值的直观证据。需要说明的是具体加速倍数取决于硬件、数据分布与查询形态示例旨在演示方法而非给出固定性能承诺。延伸示例面向云环境的瞬时故障重试SqlMIResilientCloudApp在同一目录下还附带了一个面向云场景的进阶示例SqlMIResilientCloudApp其目标是让应用在 Azure SQL Managed Instance 发生故障转移failover或瞬时错误时仍能继续运行。尽管它不在主 README 的三个示例之列但作为同一教程目录的组成部分值得一并了解。数据库侧准备在 SQL MI例如通过 SSMS上先创建测试库和表CREATE DATABASE failoverDB; USE failoverDB; CREATE TABLE timetable (datestamp datetime); INSERT INTO timetable (datestamp) VALUES (CURRENT_TIMESTAMP); SELECT * FROM timetable;连接配置连接信息通过App.config的appSettings配置程序从ConfigurationManager.AppSettings读取并拼装SqlConnectionStringBuilder见samples/tutorials/c#/Windows/SqlMIResilientCloudApp/ResilientDBApp.csappSettings add keyConnMI1.server valuemanagedinstance.public.xxxxxxxxxxx.database.windows.net,3342/ add keyConnMI1.database valuedatabasename/ add keyConnMI1.username valueusername/ add keyConnMI1.pass valuepassword/ /appSettings弹性重试逻辑程序通过bool ResilientQuery开关切换两种模式ResilientQuery false非弹性模式直接执行查询无任何重试逻辑遇到 SQL MI 故障转移会直接报错终止ResilientQuery true弹性模式采用「最多重试 4 次、初始间隔 10 秒、每次间隔放大 1.5 倍」的退避策略并且只在错误号命中瞬时错误清单时才重试static public CG.Listint TransientErrorNumbers new CG.Listint { 4060, 40197, 40501, 40613, 49918, 49919, 49920, 11001 };这组错误号如 4060 无法打开数据库、40613 服务器繁忙、40197 服务正在处理请求等正是 Azure SQL 系列服务瞬时故障的典型错误码。连接字符串中还设置了ConnectRetryCount 3、ConnectRetryInterval 10、Encrypt true、ConnectTimeout 30等面向云端连接的安全与超时参数ADO.NET 4.5.1 及以上支持。演示方法应用运行期间用SELECT * FROM timetable;观察插入的数据同时通过文章配套的 PowerShell 对 Managed Instance 发起故障转移对比ResilientQuery为true与false时应用的表现差异。该模式同样适用于其他 SQL Server 部署形态。声明与相关资源免责声明Disclaimers仓库中的脚本与本指南均作为示例提供它们不属于任何 Azure 服务不受任何 SLA 或其他 Azure 相关协议保障代码按「原样」提供不附带任何明示或默示的担保。微软不对脚本的使用或本文档的准确性承担责任请在正式使用前充分熟悉这些脚本。更多资源本教程的完整图文版可参阅官方「C# on Windows」入门教程仓库 README 中给出的外部链接更多快速上手教程与示例可浏览本仓库的教程汇总页面详见 samples/tutorials/README.md三个示例的可运行源码分别位于SqlServerSample/Program.csSqlServerEFSample/Program.csSqlServerColumnstoreSample/Program.csSqlMIResilientCloudApp/ResilientDBApp.cs建议按「ADO.NET 原生 CRUD → Entity Framework ORM → Columnstore 性能优化」的顺序逐一运行即可完整建立起 C# SQL Server 从基础数据访问到性能调优的知识链路。赞分享示例工程数据库教程后端【免费下载链接】sql-server-samplesAzure Data SQL Samples - Official Microsoft GitHub Repository containing code samples for SQL Server, Azure SQL, Azure Synapse, and Azure SQL Edge项目地址https://gitcode.com/gh_mirrors/sq/sql-server-samples点击查看免费下载相关推荐SQL Server columnstore 索引实战指南从非聚集列存储到 In-Memory 与排序列存储sql-server-samples 官方演示详解SQL Server columnstore 索引实战指南从非聚集列存储到 In Memory 与排序列存储sql server samples 官方演示详示例工程数据库教程后端5分钟掌握猫抓浏览器插件终极网页资源嗅探与视频下载完整方案5分钟掌握猫抓浏览器插件终极网页资源嗅探与视频下载完整方案 想要轻松捕获网页中的视频、音频等媒体资源吗猫抓浏览器插件正是你需要的智能工具这款开源扩展能够自示例工程数据库教程后端字节级革命FuJianAscend/byt5-xl模型深度解析告别分词器的NLP新范式字节级革命FuJianAscend/byt5 xl模型深度解析告别分词器的NLP新范式 在自然语言处理NLP领域传统的分词器一直是个技术债需要复示例工程数据库教程后端上一篇LPE Workshop案例研究真实世界中的权限提升攻击下一篇financial-services 完整指南SKILL.md 如何把机构级建模规范写成 Skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

UnityModManager安装教程:3步为游戏启用Mod支持(附5个常见坑) 2026/9/25 4:12:27

UnityModManager安装教程:3步为游戏启用Mod支持(附5个常见坑)

UnityModManager安装教程:3步为游戏启用Mod支持(附5个常见坑) 【免费下载链接】unity-mod-manager UnityModManager 项目地址: https://gitcode.com/gh_mirrors/un/unity-mod-manager UnityModManager(常简称 UMM&#xff…

阅读更多 →
ArknightsGameResource战斗系统数据解析:buff_template、battle表与[uc]lua热更脚本 2026/9/25 4:12:26

ArknightsGameResource战斗系统数据解析:buff_template、battle表与[uc]lua热更脚本

ArknightsGameResource战斗系统数据解析:buff_template、battle表与[uc]lua热更脚本 【免费下载链接】ArknightsGameResource 明日方舟客户端素材 项目地址: https://gitcode.com/gh_mirrors/ar/ArknightsGameResource ArknightsGameResource 是明日方舟客户…

阅读更多 →
AI辅助论文写作全指南:8款工具分工实测与查重率真相 2026/9/25 4:12:20

AI辅助论文写作全指南:8款工具分工实测与查重率真相

前阵子有个师弟半夜发消息问我:"师兄,网上那些AI写论文神器靠谱吗?查重率低、原创度高,真有这么神?"我反问他:你打算让AI帮你干什么?他回了一句"帮我把摘要和文献综述写了&#…

阅读更多 →
使用 AWS SDK for JavaScript (v3) 创建 AWS CodeBuild 构建项目:从示例到集成测试的实战指南 2026/9/25 4:12:20

使用 AWS SDK for JavaScript (v3) 创建 AWS CodeBuild 构建项目:从示例到集成测试的实战指南

示例工程教程后端 【免费下载链接】aws-doc-sdk-examples Welcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below. 项目地…

阅读更多 →
RSuite Affix 组件固定位置实战:top 属性、容器约束与滚动固定的底层逻辑 2026/9/25 4:12:13

RSuite Affix 组件固定位置实战:top 属性、容器约束与滚动固定的底层逻辑

前端UI组件 【免费下载链接】rsuite 🧱 A suite of React components . 项目地址: https://gitcode.com/gh_mirrors/rs/rsuite 点击查看 免费下载 导读 本文围绕 RSuite 组件库中 Affix 固定位置组件的 top 属性展开:它是 Affix 最常用的配…

阅读更多 →
AI落地真相:六成项目使用率不足,幻觉、部署与Agent三大坑 2026/9/25 4:12:13

AI落地真相:六成项目使用率不足,幻觉、部署与Agent三大坑

上周末和一个做AI落地交付的朋友通了将近两个小时的语音。他这三年从大厂出来自己接项目,经手的行业覆盖金融、制造、客服,全是正经的企业级合同。电话挂掉之后我在书桌前坐了很久,脑子里只有一个念头反复打转:他说的每一句话&…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉