SQL Server与C#连接实战:ADO.NET核心代码详解
一、SQL Server数据库语法基础SQL语句主要分为三类DDL数据定义语言、DML数据操作语言和DQL数据查询语言。1 DDL数据定义语言DDL用于定义和管理数据库对象数据库、表、字段等的结构。-- 创建数据库 CREATE DATABASE MyDatabase; -- 删除数据库 DROP DATABASE MyDatabase; -- 使用数据库 USE MyDatabase; -- 创建表 CREATE TABLE Employees ( EmployeeID INT PRIMARY KEY IDENTITY(1,1), FirstName NVARCHAR(50) NOT NULL, LastName NVARCHAR(50) NOT NULL, Email NVARCHAR(100) UNIQUE, HireDate DATE DEFAULT GETDATE(), Salary DECIMAL(10,2) CHECK (Salary 0), DepartmentID INT FOREIGN KEY REFERENCES Departments(DepartmentID) ); -- 增加字段 ALTER TABLE Employees ADD PhoneNumber NVARCHAR(20); -- 删除字段 ALTER TABLE Employees DROP COLUMN PhoneNumber; -- 修改字段类型 ALTER TABLE Employees ALTER COLUMN Salary DECIMAL(12,2); -- 删除表 DROP TABLE Employees;2 DML数据操作语言DML用于对表中的数据进行增、删、改操作。-- 插入数据 INSERT INTO Employees (FirstName, LastName, Email, Salary, DepartmentID) VALUES (张, 三, zhangsanexample.com, 5000.00, 1); -- 插入多行数据 INSERT INTO Employees (FirstName, LastName, Email, Salary, DepartmentID) VALUES (李, 四, lisiexample.com, 6000.00, 1), (王, 五, wangwuexample.com, 5500.00, 2); -- 删除数据 DELETE FROM Employees WHERE EmployeeID 1; -- 删除所有数据慎用 DELETE FROM Employees; -- 更新数据 UPDATE Employees SET Salary Salary * 1.1, Email newemailexample.com WHERE DepartmentID 1; -- 更新所有记录 UPDATE Employees SET HireDate GETDATE();3 DQL数据查询语言DQL用于从数据库中查询数据SELECT语句是最常用的查询语句。-- 查询所有字段 SELECT * FROM Employees; -- 查询特定字段 SELECT EmployeeID, FirstName, LastName, Salary FROM Employees; -- 带条件的查询 SELECT * FROM Employees WHERE Salary 5000 AND DepartmentID 1; -- 排序查询 SELECT * FROM Employees ORDER BY Salary DESC, LastName ASC; -- 分组统计 SELECT DepartmentID, COUNT(*) AS EmployeeCount, AVG(Salary) AS AvgSalary, MAX(Salary) AS MaxSalary, MIN(Salary) AS MinSalary FROM Employees GROUP BY DepartmentID HAVING COUNT(*) 5; -- 连接查询 SELECT e.FirstName, e.LastName, d.DepartmentName FROM Employees e INNER JOIN Departments d ON e.DepartmentID d.DepartmentID; -- 子查询 SELECT FirstName, LastName, Salary FROM Employees WHERE Salary (SELECT AVG(Salary) FROM Employees); -- 分页查询SQL Server 2012 SELECT * FROM Employees ORDER BY EmployeeID OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY; -- 常用聚合函数 SELECT COUNT(*) AS TotalEmployees, SUM(Salary) AS TotalSalary, AVG(Salary) AS AverageSalary, MAX(Salary) AS HighestSalary, MIN(Salary) AS LowestSalary FROM Employees;4 常用SQL函数-- 字符串函数 SELECT UPPER(FirstName) AS UpperName, LOWER(LastName) AS LowerName, LEN(FirstName) AS NameLength, CONCAT(FirstName, , LastName) AS FullName, SUBSTRING(Email, 1, CHARINDEX(, Email) - 1) AS Username FROM Employees; -- 日期函数 SELECT GETDATE() AS CurrentDateTime, YEAR(HireDate) AS HireYear, MONTH(HireDate) AS HireMonth, DAY(HireDate) AS HireDay, DATEDIFF(YEAR, HireDate, GETDATE()) AS YearsOfService FROM Employees; -- 数学函数 SELECT ROUND(Salary, 0) AS RoundedSalary, CEILING(Salary) AS CeilingSalary, FLOOR(Salary) AS FloorSalary, ABS(Salary - 5000) AS SalaryDifference FROM Employees;掌握这些基础SQL语法后可以更好地理解C#中执行的SQL语句并编写出更高效、安全的数据库操作代码。二、 数据库与C#连接1.1 基础连接示例using System.Data; using Microsoft.Data.SqlClient; public class DatabaseConnector { public void ConnectToDatabase() { // 连接字符串 string connectionString Serverlocalhost\\SQLEXPRESS;DatabaseTestDB;Trusted_ConnectionTrue;; //server为数据库地址一般为主机127.0.0.1/localhost //Database为要连接的数据库名 //Trusted_ConnectionTrue表示是否使用windows是否验证进行登录 //除此之外还有其他登录方法Serverlocalhost\\SQLEXPRESS;DatabaseTestDB;Password 数据库密码;User Id 登录的用户名一般为sa; // 创建并打开连接使用using语法结束后就会自动关闭数据库连接connection.close(); using (SqlConnection connection new SqlConnection(connectionString)) { try { connection.Open();//开启连接 Console.WriteLine(连接成功); Console.WriteLine($数据库版本: {connection.ServerVersion}); Console.WriteLine($数据库名称: {connection.Database}); string yoursql select * from student;//你的sql语句 using(SqlCommand sqlcom new SqlCommand(yoursql,connection )){ //1.查询语句使用ExecuteReader方法 using (SqlDataReader reader sqlcom .ExecuteReader()) { while(reader.Read()) { //如果reader 有下一个值就为true Console.WriteLine(reader[Name]); } } //2.非查询语句就使用ExecuteNonQuery();相应的本sql语句yoursql应该更改 int rows sqlcom .ExecuteNonQuery();//返回受影响的行 } } catch (SqlException ex) { Console.WriteLine($数据库连接错误: {ex.Message}); } } } }2. 数据查询操作2.1 查询并读取数据public ListProduct GetProducts() { ListProduct products new ListProduct(); string connectionString Serverlocalhost\\SQLEXPRESS;DatabaseNorthwind;Trusted_ConnectionTrue;; using (SqlConnection connection new SqlConnection(connectionString)) { string query SELECT ProductID, ProductName, UnitPrice, UnitsInStock FROM Products; using (SqlCommand command new SqlCommand(query, connection)) { connection.Open(); using (SqlDataReader reader command.ExecuteReader()) { while (reader.Read()) { Product product new Product { ProductID reader.GetInt32(0), ProductName reader.GetString(1), UnitPrice reader.GetDecimal(2), UnitsInStock reader.GetInt16(3) }; products.Add(product); } } } } return products; }2.2 参数化查询防止SQL注入public Product GetProductById(int productId) { Product product null; string connectionString Serverlocalhost\\SQLEXPRESS;DatabaseNorthwind;Trusted_ConnectionTrue;; using (SqlConnection connection new SqlConnection(connectionString)) { string query SELECT ProductID, ProductName, UnitPrice FROM Products WHERE ProductID ProductID; using (SqlCommand command new SqlCommand(query, connection)) { // 添加参数 command.Parameters.AddWithValue(ProductID, productId); connection.Open(); using (SqlDataReader reader command.ExecuteReader()) { if (reader.Read()) { product new Product { ProductID reader.GetInt32(0), ProductName reader.GetString(1), UnitPrice reader.GetDecimal(2) }; } } } } return product; }3. 数据修改操作3.1 插入数据public int InsertProduct(string productName, decimal unitPrice) { int rowsAffected 0; string connectionString Serverlocalhost\\SQLEXPRESS;DatabaseNorthwind;Trusted_ConnectionTrue;; using (SqlConnection connection new SqlConnection(connectionString)) { string query INSERT INTO Products (ProductName, UnitPrice) VALUES (ProductName, UnitPrice); using (SqlCommand command new SqlCommand(query, connection)) { command.Parameters.AddWithValue(ProductName, productName); command.Parameters.AddWithValue(UnitPrice, unitPrice); connection.Open(); rowsAffected command.ExecuteNonQuery(); } } return rowsAffected; }3.2 更新数据public int UpdateProductPrice(int productId, decimal newPrice) { int rowsAffected 0; string connectionString Serverlocalhost\\SQLEXPRESS;DatabaseNorthwind;Trusted_ConnectionTrue;; using (SqlConnection connection new SqlConnection(connectionString)) { string query UPDATE Products SET UnitPrice UnitPrice WHERE ProductID ProductID; using (SqlCommand command new SqlCommand(query, connection)) { command.Parameters.AddWithValue(UnitPrice, newPrice); command.Parameters.AddWithValue(ProductID, productId); connection.Open(); rowsAffected command.ExecuteNonQuery(); } } return rowsAffected; }3.3 删除数据public int DeleteProduct(int productId) { int rowsAffected 0; string connectionString Serverlocalhost\\SQLEXPRESS;DatabaseNorthwind;Trusted_ConnectionTrue;; using (SqlConnection connection new SqlConnection(connectionString)) { string query DELETE FROM Products WHERE ProductID ProductID; using (SqlCommand command new SqlCommand(query, connection)) { command.Parameters.AddWithValue(ProductID, productId); connection.Open(); rowsAffected command.ExecuteNonQuery(); } } return rowsAffected; }以上为数据库的基本操作额外内容还包括事务、异常等感兴趣自行搜索。

相关新闻

2026年实用AI论文平台全攻略(含新手入门指南)

2026年实用AI论文平台全攻略(含新手入门指南)

以下是当前学术圈口碑TOP的6款AI写论文工具,覆盖从选题、开题到降重、答辩的论文全流程,剔除冗余工具,每款均附分步骤实操指南场景适配技巧,重点突出中文论文适配性,新手也能快速上手,效率翻倍。一、全流程…

2026/7/13 4:25:30阅读更多 →
TC78H653FTG与STM32F407ZG的直流有刷电机控制方案

TC78H653FTG与STM32F407ZG的直流有刷电机控制方案

1. 项目概述:TC78H653FTG与STM32F407ZG的强强联合在工业自动化和消费电子领域,直流有刷电机因其结构简单、控制方便且成本低廉的特点,至今仍占据重要地位。然而,传统驱动方案往往存在效率低下、控制精度不足等问题。本文将深入探讨…

2026/7/13 4:25:30阅读更多 →
深度探索:如何优雅解决Navicat试用期限制的技术方案

深度探索:如何优雅解决Navicat试用期限制的技术方案

深度探索:如何优雅解决Navicat试用期限制的技术方案 【免费下载链接】navicat-key 项目地址: https://gitcode.com/gh_mirrors/na/navicat-key 你是否曾经遇到过这样的困境?正在紧张地进行数据库开发工作,Navicat的14天试用期却突然到…

2026/7/13 4:25:30阅读更多 →
VS Code Arduino 扩展弃用后:3种替代方案迁移指南与性能实测

VS Code Arduino 扩展弃用后:3种替代方案迁移指南与性能实测

VS Code Arduino扩展弃用后的技术迁移指南:三大替代方案深度评测当微软官方宣布弃用VS Code的Arduino扩展时,整个开发者社区都感受到了震动。这个曾经让无数硬件爱好者摆脱笨重IDE的工具突然面临断供,让许多依赖它进行高效开发的工程师措手不…

2026/7/13 5:30:36阅读更多 →
如何通过路灯智能控制器提升城市照明的智能化管理?

如何通过路灯智能控制器提升城市照明的智能化管理?

如何实现城市照明智能化管理 在城市照明中,如何有效引入智能照明系统成为了一个重要问题。那么,路灯智能控制器究竟能带来什么?根据《2022中国智能城市发展白皮书》,约80%的城市面临照明管理上的挑战,包括故障响应慢和…

2026/7/13 5:30:36阅读更多 →
Seedance2.0:AI故事板构图控制工作流实战解析

Seedance2.0:AI故事板构图控制工作流实战解析

如果你正在用AI生成故事板或漫画分镜,可能已经发现了一个尴尬的现实:AI画单张图效果不错,但要让多张图保持角色一致、场景连贯,简直是一场噩梦。要么角色长相飘忽不定,要么背景风格跳来跳去,更别提控制构图…

2026/7/13 5:30:36阅读更多 →
C++ if语句深度解析:从基础语法到实战避坑指南

C++ if语句深度解析:从基础语法到实战避坑指南

1. 从“开关”到“大脑”:为什么C的if语句是程序逻辑的基石如果你刚开始接触C,可能会觉得if语句不就是个简单的“如果...就...”吗?这有什么好讲的?我刚开始学的时候也这么想,直到后来在项目里踩了无数个坑&#xff0c…

2026/7/13 5:30:36阅读更多 →
UML 2.5 类图实战:6种关系代码实现与3个典型业务场景解析

UML 2.5 类图实战:6种关系代码实现与3个典型业务场景解析

UML 2.5 类图实战:6种关系代码实现与3个典型业务场景解析在面向对象编程的世界里,UML类图就像建筑师手中的蓝图,它能清晰地描绘出系统中各个类之间的关系。对于开发者而言,掌握类图中六种核心关系的代码实现,就如同获得…

2026/7/13 5:30:36阅读更多 →
Java文件魔数校验实战:从原理到代码实现文件类型安全识别

Java文件魔数校验实战:从原理到代码实现文件类型安全识别

1. 项目概述:为什么后缀名靠不住?在文件处理的世界里,我们太习惯依赖文件后缀名了。看到一个.jpg,就认为是图片;看到一个.pdf,就认为是文档。但如果你在服务器上收到一个名为invoice.pdf.exe的文件&#xf…

2026/7/13 5:25:35阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/13 4:47:19阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/13 0:50:34阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/13 4:52:09阅读更多 →
卡梅德生物技术快报|蛋白质分离纯化:肠激酶可溶性原核表达 + 两步层析全参数|标准化蛋白质分离纯化 SOP

卡梅德生物技术快报|蛋白质分离纯化:肠激酶可溶性原核表达 + 两步层析全参数|标准化蛋白质分离纯化 SOP

研究痛点提出(提出问题)重组肠激酶是融合标签切除核心工具酶,当前原核表达体系存在三大标准化难题,直接阻碍可复现的蛋白质分离纯化流程搭建:Trx、GST、单 SUMO 标签融合产物绝大多数为包涵体,沉淀占比超 9…

2026/7/13 0:04:58阅读更多 →
语音转文字工具AsrTools:让音频整理变得简单高效

语音转文字工具AsrTools:让音频整理变得简单高效

语音转文字工具AsrTools:让音频整理变得简单高效 【免费下载链接】AsrTools ✨ AsrTools: Smart Voice-to-Text Tool | Efficient Batch Processing | User-Friendly Interface | No GPU Required | Supports SRT/TXT Output | Turn your audio into accurate text …

2026/7/13 0:04:58阅读更多 →
Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改 【免费下载链接】palworld-save-tools Tools for converting Palworld .sav files to JSON and back 项目地址: https://gitcode.com/gh_mirrors/pa/palworld-save-tools 你是否曾经想要调整Palwor…

2026/7/13 0:04:58阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/13 4:21:17阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/13 4:08:53阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/12 21:43:43阅读更多 →