SQL数据库增删改查基本操作及C#开发使用方法

基本了解
SQL(Structured Query Language)是用于访问和处理关系型数据库的标准计算机语言。它包括数据定义语言(DDL)、数据操作语言(DML)和数据库控制功能(DCL)。SQL的主要功能包括查询数据、在表中插入、更新和删除行、创建、替换、更改和删除对象,以及控制对数据库及其对象的访问。
SQL是所有关系数据库通用的标准语言,但某些关系数据库可能不支持SQL中的少数语句。关系数据库会在SQL基础上进行一些扩展,增加一些额外的功能,这些额外的功能是该种关系数据库特有的,只能在该种数据库中使用。
常见的关系型数据库有Oracle和MySQL。Oracle性能极好,但比较昂贵,大公司用得多;MySQL则是开源免费,体积小,性能也不错,中小公司用得多。
数据表是存储数据的逻辑单元,每一行称为一条记录,每一列称为一个字段。主键是唯一标识此条记录的键。
总之,SQL是一种用于管理关系型数据库的标准计算机语言,具有丰富的功能和灵活性,广泛应用于各种关系型数据库系统。
SQL是关系型数据库的标准语言,用于执行各种数据库操作,例如增删改查数据、定义数据库结构等。MySQL是一种具体的实现,提供了关系型数据库的管理功能,例如创建表、存储数据、优化查询等。
在MySQL中,通过使用SQL语言,可以执行各种数据库操作,例如创建表、插入数据、查询数据、更新数据等。因此,SQL和MySQL之间是一种语言和实现的关系,它们共同提供了关系型数据库的功能。
除了SQL数据库,还有许多其他常用的数据库,以下列举几种常见的数据库类型:
1、NoSQL数据库:NoSQL数据库是一种非关系型数据库,它使用键值对(key-value)或者文档(document)的形式存储数据,不需要事先定义数据模型。常见的NoSQL数据库包括MongoDB、Cassandra、Redis等。
2、列式数据库:列式数据库是一种针对大规模数据处理和实时分析的数据库,它将数据按照列进行存储,以便更快速地执行查询和计算操作。常见的列式数据库包括Cassandra、HBase等。
3、内存数据库:内存数据库是将数据存储在内存中,而不是磁盘上的数据库。由于内存的读写速度比磁盘快得多,因此内存数据库可以提供非常高的查询速度。常见的内存数据库包括Redis、Memcached等。
4、图形数据库:图形数据库用于存储和查询图形结构的数据。在图形数据库中,实体之间的关系被建模为节点和边,这使得查询和分析复杂的关系变得更加容易。常见的图形数据库包括Neo4j、GraphDB等。
5、时间序列数据库:时间序列数据库用于存储和管理时间序列数据,例如传感器数据、交易记录等。这些数据库通常具有高性能、低延迟的特性,可以快速地存储和查询时间序列数据。常见的时间序列数据库包括InfluxDB、Prometheus等。
这些数据库类型各有特点,适用于不同的应用场景。选择合适的数据库类型取决于所需的数据处理能力、查询复杂度、数据规模等因素。
建表及添加
建表,数据源,数据库。


安装MySQL,在安装过程中,需要设置MySQL的root用户密码。
启动MySQL服务:安装完成后,MySQL服务默认是未启动的。可以在“服务”中手动启动,也可以使用命令行方式启动。具体命令为:net start mysql。
连接MySQL:可以使用MySQL自带的命令行客户端登录,也可以使用图形化客户端如MySQL Workbench登录。登录时需要输入用户名(root)、密码和要连接的服务器地址(localhost,如果MySQL服务在本机上)。
创建新的数据库:登录成功后,可以使用SQL语句来创建数据库。语法为:sql CREATE DATABASE 数据库名。例如,创建名为“my_db”的数据库:sql CREATE DATABASE my_db。
选择使用的数据库:创建好数据库后,需要使用“USE”语句来选择要操作的数据库。语法为:sql USE 数据库名。例如,使用名为“my_db”的数据库:sql USE my_db。
打开数据库软件,并登录到数据库服务器。你需要使用管理员帐户登录。
在数据库服务器上创建一个新的数据库。这可以通过命令行或者通过图形界面完成。
客户端连接数据库需要以下参数:
主机名(或IP地址):用于标识数据库所在的服务器。
端口号:数据库服务器的端口号,默认为3306。
用户名:登录数据库的用户名。
密码:登录数据库的密码。
数据库名称:连接的具体数据库名称。
以上是MySQL数据库连接中的必要参数。除此之外,还有其他一些可选参数,如超时时间、连接所使用的socket地址、SSL证书等,根据具体需求进行配置。
建表
手动建表SQL建表语句用于创建一个新的数据库表,并定义该表的结构。下面是一个简单的SQL建表语句的示例:
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
column3 datatype,
...
);
在上述语句中,你需要提供以下信息:
table_name:要创建的表的名称。
column1, column2, column3:表的列名。
datatype:每列的数据类型,例如整数(INT)、字符串(VARCHAR)、日期(DATE)等。
常见的数据类型包括以下几种:
1、INTEGER(整数类型):用于存储整数。
2、FLOAT(浮点数类型):用于存储带有小数点的数值。
3、CHAR(字符类型):用于存储定长字符串。
4、VARCHAR(可变长字符串类型):用于存储可变长度的字符串。
5、DATE(日期类型):用于存储日期信息。
6、TIME(时间类型):用于存储时间信息。
7、DATETIME(日期时间类型):用于存储日期和时间信息。
8、BOOLEAN(布尔类型):用于存储逻辑值(真/假)。
9、BLOB(二进制大对象类型):用于存储二进制数据。
这些数据类型可以根据实际需求进行选择,以适应不同类型的数据存储。
数据表列类型描述PRIMARY KEY唯一标识,INTeger PRIMARY KEY AUTOINCREMENT唯一标识且自动编号自动递增,该列数据无需操作自动完成编号。salary DECIMAL(10, 2) salary列被定义为带有两位小数的十进制数等操作。
下面是一个更具体的示例,创建一个名为"Employees"的表,包含员工的ID、姓名、职位和入职日期等列:
CREATE TABLE Employees (
EmployeeID INT, --int整数类型
FirstName VARCHAR(50), --字符串长度50
LastName VARCHAR(50),
Position VARCHAR(50),
HireDate DATE --日期
);
在这个示例中,EmployeeID、FirstName、LastName、Position和HireDate是表的列名,分别使用了整数(INT)、字符串(VARCHAR)和日期(DATE)等数据类型。你可以根据实际需求调整列名和数据类型。
CREATE TABLE if not exists Employees是一种更灵活的语法,它只有在表不存在时才会创建表。如果表已经存在,则不会执行任何操作。这种语法允许您避免因表已经存在而产生的错误。
另一方面,CREATE TABLE Employees将始终创建一个名为"Employees"的新表,而不管该表是否已经存在。如果表已经存在,这可能会导致数据冗余或错误。
提到的手动创建表和使用图形界面工具创建表外,还有其他建表方法。以下是一些其他建表方法:
1、使用存储过程创建表:您可以编写存储过程来创建表。存储过程是预编译的SQL语句,可以在数据库中创建表、视图、函数等。
2、使用触发器创建表:触发器是一种在数据库中执行特定操作时自动触发的一段代码。您可以使用触发器在数据库中创建表。
3、使用编程语言创建表:您可以使用各种编程语言(如Python、Java等)通过与数据库交互来创建表。
增加
要向已存在的表中添加数据,您可以使用SQL的INSERT INTO语句。以下是一个示例:
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
在上述语句中,您需要提供以下信息:
table_name:要添加数据的表的名称。
(column1, column2, column3, ...):要插入数据的列的名称。
(value1, value2, value3, ...):要插入到对应列中的实际值。
以下是一个具体的示例,假设有一个名为"Students"的表,包含"StudentID"、"FirstName"、"LastName"、"Age"和"EnrollmentYear"等列。现在要向该表中插入一条新的学生记录:
INSERT INTO Students (StudentID, FirstName, LastName, Age, EnrollmentYear)
VALUES (1, 'John', 'Doe', 20, 2022);
在这个示例中,我们向"Students"表中的指定列插入了新的值。请注意,插入的值必须与列的数据类型匹配。
SQL可以为原数据表添加新列。您可以使用ALTER TABLE语句来修改表结构,并添加新列。以下是添加新列的示例语法:
ALTER TABLE table_name
ADD column_name data_type;
在上面的语法中,您需要将"table_name"替换为要添加列的表名,"column_name"替换为要添加的列名,"data_type"替换为该列的数据类型。
例如,如果您有一个名为"employees"的表,并且想要在该表中添加一个名为"salary"的新列,数据类型为DECIMAL,您可以执行以下语句:
ALTER TABLE employees
ADD salary DECIMAL;
执行该语句后,"employees"表中将会添加一个新的"salary"列。请注意,如果新列的数据类型不是空的,您可能需要在添加列之后为该列提供适当的初始值。
查询
注释符:单行注释--,多行注释使用/*开始,使用*/结束。
SQL语句命令执行采用;号结束语句,可以写多条语句实现。

条件查询:
where 子句的语法如下:
SELECT
列
1,
列
2, ...
FROM
表名
WHERE
条件
;

查询进阶
关联查询:
在之前的教程中,我们所有的查询操作都是在单个数据表中进行的。但有时,我们可能希望在单张表的基础上,获取更多额外数据,比如获取学生表中学生所属的班级信息等。这时,就需要使用关联查询。
在 SQL 中,关联查询是一种用于联合多个数据表中的数据的查询方式。
其中,CROSS JOIN 是一种简单的关联查询,不需要任何条件来匹配行,它直接将左表的 每一行 与右表的 每一行 进行组合,返回的结果是两个表的笛卡尔积。
SELECT e.name AS student_name, e.age AS student_age,
e.class_id, d.name AS class_name
FROM student e
CROSS JOIN class d;
在 SQL 中,INNER JOIN 是一种常见的关联查询方式,它根据两个表之间的关联条件,将满足条件的行组合在一起。
注意,INNER JOIN 只返回两个表中满足关联条件的交集部分,即在两个表中都存在的匹配行。
SELECT e.name AS student_name, e.age AS student_age,
e.class_id, d.name AS class_name ,d.level AS class_level
FROM student e
JOIN class d ON e.class_id = d.id;
在 SQL 中,OUTER JOIN 是一种关联查询方式,它根据指定的关联条件,将两个表中满足条件的行组合在一起,并 包含没有匹配的行 。
在 OUTER JOIN 中,包括 LEFT OUTER JOIN 和 RIGHT OUTER JOIN 两种类型,它们分别表示查询左表和右表的所有行(即使没有被匹配),再加上满足条件的交集部分。
有些数据库并不支持 RIGHT JOIN 语法,那么如何实现 RIGHT JOIN 呢?
其实只需要把主表(from 后面的表)和关联表(LEFT JOIN 后面的表)顺序进行调换即可!
SELECT e.name AS student_name, e.age AS student_age,
e.class_id, d.name AS class_name,d.level AS class_level
FROM student e
LEFT JOIN class d ON e.class_id = d.id;
子查询
子查询是指在一个查询语句内部 嵌套 另一个完整的查询语句,内层查询被称为子查询。子查询可以用于获取更复杂的查询结果或者用于过滤数据。
当执行包含子查询的查询语句时,数据库引擎会首先执行子查询,然后将其结果作为条件或数据源来执行外层查询。
打个比方,子查询就像是在一个盒子中的盒子,外层查询是大盒子,内层查询是小盒子。执行查询时,我们首先打开小盒子获取结果,然后将小盒子的结果放到大盒子中继续处理。
子查询是一种强大的查询工具,它可以嵌套在主查询中,帮助我们进行更复杂的条件过滤和数据检索。
其中,子查询中的一种特殊类型是 "exists" 子查询,用于检查主查询的结果集是否存在满足条件的记录,它返回布尔值(True 或 False),而不返回实际的数据。
-- 主查询
SELECT name, total_amount
FROM customers
WHERE customer_id
IN (
-- 子查询
SELECT
DISTINCT customer_id
FROM orders
WHERE total_amount
>
200);
和 exists 相对的是 not exists,用于查找不满足存在条件的记录。
SELECT name, age,class_id
FROM student
WHERE not EXISTS (
-- 子查询
SELECT 1
FROM class
WHERE class.id = student.class_id
);
组合查询
在 SQL 中,组合查询是一种将多个 SELECT 查询结果合并在一起的查询操作。
包括两种常见的组合查询操作:UNION 和 UNION ALL。
1、UNION 操作:它用于将两个或多个查询的结果集合并, 并去除重复的行 。即如果两个查询的结果有相同的行,则只保留一行。
2、UNION ALL 操作:它也用于将两个或多个查询的结果集合并, 但不去除重复的行 。即如果两个查询的结果有相同的行,则全部保留。
-- UNION ALL操作
SELECT name, age, score,class_id
FROM student
UNION ALL
SELECT name, age, score,class_id
FROM student_new;
开窗函数
在 SQL 中,开窗函数是一种强大的查询工具,它允许我们在查询中进行对分组数据进行计算、 同时保留原始行的详细信息 。
开窗函数可以与聚合函数(如 SUM、AVG、COUNT 等)结合使用,但与普通聚合函数不同,开窗函数不会导致结果集的行数减少。
打个比方,可以将开窗函数想象成一种 "透视镜",它能够将我们聚焦在某个特定的分组,同时还能看到整体的全景。
开窗函数sum over
该函数用法为:
SUM(计算字段名) OVER (PARTITION BY 分组字段名)
SELECT
id,
name,
age,
score,
class_id,
avg(score) OVER
(PARTITION BY class_id) AS class_avg_score
FROM
student;
sum over 函数的另一种用法:sum over order by,可以实现同组内数据的 累加求和 。
示例用法如下:
SUM(计算字段名) OVER (PARTITION BY 分组字段名 ORDER BY 排序字段 排序规则)
SELECT
id,
name,
age,
score,
class_id,
SUM(score) OVER
(PARTITION BY class_id ORDER BY score ASC)
AS class_sum_score
FROM
student;
我们使用开窗函数 SUM 来计算每个客户的历史订单累计金额(cumulative_total_amount),并使用 PARTITION BY 子句按照 customer_id 进行分组,并使用 ORDER BY 子句按照 order_date 进行排序。从结果的前两行可以看到,开窗函数保留了原始订单的详细信息,同时计算了每个客户的历史订单累计金额;相比于只用 sum over,同组内的累加列名称
开窗函数Rank
Rank 开窗函数是 SQL 中一种用于对查询结果集中的行进行 排名 的开窗函数。它可以根据指定的列或表达式对结果集中的行进行排序,并为每一行分配一个排名。在排名过程中,相同的值将被赋予相同的排名,而不同的值将被赋予不同的排名。
当存在并列(相同排序值)时,Rank 会跳过后续排名,并保留相同的排名。
Rank 开窗函数的常见用法是在查询结果中查找前几名(Top N)或排名最高的行。
Rank 开窗函数的语法如下:
RANK()
OVER (
PARTITION
BY
列名
1,
列名
2, ...
-- 可选,用于指定分组列
ORDER
BY
列名
3 [
ASC|DESC],
列名
4 [
ASC|DESC], ...
-- 用于指定排序列及排序方式
)
AS rank_column
其中,PARTITION BY 子句可选,用于指定分组列,将结果集按照指定列进行分组;ORDER BY 子句用于指定排序列及排序方式,决定了计算 Rank 时的排序规则。AS rank_column 用于指定生成的 Rank 排名列的别名。
SELECT
id,
name,
age,
score,
class_id,
RANK() OVER
(PARTITION BY class_id ORDER BY score DESC)
AS ranking
FROM
student;
开窗函数Row_Number
Row_Number 开窗函数是 SQL 中的一种用于为查询结果集中的每一行 分配唯一连续排名 的开窗函数。
它与之前讲到的 Rank 函数,Row_Number 函数为每一行都分配一个唯一的整数值,不管是否存在并列(相同排序值)的情况。每一行都有一个唯一的行号,从 1 开始连续递增。
Row_Number 开窗函数的语法如下(几乎和 Rank 函数一模一样):
ROW_NUMBER()
OVER (
PARTITION
BY column1, column2, ...
-- 可选,用于指定分组列
ORDER
BY column3 [
ASC|DESC], column4 [
ASC|DESC], ...
-- 用于指定排序列及排序方式
)
AS row_number_column
其中,PARTITION BY子句可选,用于指定分组列,将结果集按照指定列进行分组。ORDER BY 子句用于指定排序列及排序方式,决定了计算 Row_Number 时的排序规则。AS row_number_column 用于指定生成的行号列的别名。
SELECT
id,
name,
age,
score,
class_id,
ROW_NUMBER() OVER
(PARTITION BY class_id ORDER BY score DESC)
AS row_number
FROM
student;
开窗函数-lag / lead
开窗函数 Lag 和 Lead 的作用是获取在当前行之前或之后的行的值,这两个函数通常在需要比较相邻行数据或进行时间序列分析时非常有用。
1)Lag 函数
Lag 函数用于获取 当前行之前 的某一列的值。它可以帮助我们查看上一行的数据。
Lag 函数的语法如下:
LAG(column_name, offset, default_value) OVER (PARTITION BY partition_column ORDER BY sort_column)
参数解释:
column_name:要获取值的列名。
offset:表示要向上偏移的行数。例如,offset为1表示获取上一行的值,offset为2表示获取上两行的值,以此类推。
default_value:可选参数,用于指定当没有前一行时的默认值。
PARTITION BY和ORDER BY子句可选,用于分组和排序数据。
2)Lead 函数
Lead 函数用于获取 当前行之后 的某一列的值。它可以帮助我们查看下一行的数据。
Lead 函数的语法如下:
LEAD(column_name, offset, default_value) OVER (PARTITION BY partition_column ORDER BY sort_column)
参数解释:
column_name:要获取值的列名。
offset:表示要向下偏移的行数。例如,offset为1表示获取下一行的值,offset为2表示获取下两行的值,以此类推。
default_value:可选参数,用于指定当没有后一行时的默认值。
PARTITION BY和ORDER BY子句可选,用于分组和排序数据。
· SELECT
· id,
· name,
· age,
· score,
· class_id,
· LAG(name, 1, NULL) OVER
· (PARTITION BY class_id ORDER BY score DESC)
· AS prev_name,
· LEAD(name, 1, NULL) OVER
· (PARTITION BY class_id ORDER BY score DESC)
· AS next_name
· FROM
· student;
基本操作
去重、排序、截断偏移操作

条件分支
case when 支持同时指定多个分支,示例语法如下:
CASE WHEN (条件1) THEN 结果1
WHEN (条件2) THEN 结果2
...
ELSE 其他结果 END

时间函数
常用的时间函数有:
DATE:获取当前日期
DATETIME:获取当前日期时间
TIME:获取当前时间
还有很多时间函数,比如计算两个日期的相差天数、获取当前日期对应的毫秒数等,
SELECT name , DATE() AS '当前日期' from student;
字符串处理
在 SQL 中,字符串处理是一类用于处理文本数据的函数。它们允许我们对字符串进行各种操作,如转换大小写、计算字符串长度以及搜索和替换子字符串等。字符串处理函数可以帮助我们在数据库中对字符串进行加工和转换,从而满足不同的需求。
LOWER、UPPER字符串大小写切换,LENGTH字符串长度等。
SELECT id , name, upper(name) AS upper_name
FROM student where name=='热dog';
聚合函数
在 SQL 中,聚合函数是一类用于对数据集进行 汇总计算 的特殊函数。它们可以对一组数据执行诸如计数、求和、平均值、最大值和最小值等操作。聚合函数通常在 SELECT 语句中配合 GROUP BY 子句使用,用于对分组后的数据进行汇总分析。(数学函数运算)
常见的聚合函数包括:
COUNT:计算指定列的行数或非空值的数量。
SUM:计算指定列的数值之和。
AVG:计算指定列的数值平均值。
MAX:找出指定列的最大值。
MIN:找出指定列的最小值。
· SELECT SUM(score) AS total_score,
· avg(score)AS avg_score,
· MAX(score)AS max_score,
· MIN(score)AS min_score
· FROM student;
分组聚合
在 SQL 中,分组聚合是一种对数据进行分类并对每个分类进行聚合计算的操作。它允许我们按照指定的列或字段对数据进行分组(单字段、多字段或having 子句分组),然后对每个分组应用聚合函数,如 COUNT、SUM、AVG 等,以获得分组后的汇总结果。
举个例子:某个学校可以按照班级将学生分组,并对每个班级进行统计。查看每个班级有多少学生、每个班级的平均成绩。这样我们就能够对学校各班的学生情况有一个整体的了解,而不是单纯看个别学生的信息。
在 SQL 中,通常使用 GROUP BY 关键字对数据进行分组。
单字段分组:
SELECT class_id, avg(score) AS avg_score
FROM student
GROUP BY class_id;
多字段分组:
--统计学生表中每个班级每次考试的总学生人数
SELECT class_id,exam_num, COUNT(class_id) AS total_num
FROM student
GROUP BY class_id,exam_num;
在 SQL 中,HAVING 子句用于在分组聚合后对分组进行过滤。它允许我们对分组后的结果进行条件筛选,只保留满足特定条件的分组。
HAVING 子句与条件查询 WHERE 子句的区别在于,WHERE 子句用于在 分组之前 进行过滤,而 HAVING 子句用于在 分组之后 进行过滤。
--请你编写一个 SQL 查询,统计学生表中班级的总成绩超过 150 分的班级编号(class_id)和总成绩(total_score)。
SELECT class_id, SUM(score) AS total_score
FROM student
GROUP BY class_id
HAVING SUM(score) > 150;
删除
在SQL中,删除操作用于从数据库表中删除记录。以下是SQL删除操作的语法:
DELETE FROM table_name
WHERE condition;
其中:
DELETE FROM指定要删除记录的表名。
WHERE关键字用于指定删除记录的条件。如果省略WHERE子句,则将删除表中的所有记录。
condition是一个可选的条件,用于指定要删除的记录。只有满足条件的记录才会被删除。
以下是一些示例:
1、删除表中满足条件的记录:
DELETE FROM table_name WHERE condition;
例如,要从名为employees的表中删除所有薪资小于5000的记录,可以使用以下语句:DELETE FROM employees WHERE salary < 5000;
2、删除表中的所有记录:
DELETE FROM table_name;
例如,要删除名为customers的表中的所有记录,可以使用以下语句:
DELETE FROM customers;
请注意,执行删除操作时要非常小心,因为一旦删除数据,将无法恢复。建议在执行删除操作之前备份重要数据。
更改
要修改SQL数据表中的数据,您可以使用UPDATE语句。以下是一个基本的UPDATE语句的示例:
UPDATE table_name
SET column1 = new_value1, column2 = new_value2, ...
WHERE condition;
在上述语句中,您需要提供以下信息:
table_name:要修改数据的表的名称。
SET:指定要更新的列和对应的新值。
WHERE:可选项,用于指定更新的条件。只有满足条件的记录才会被更新。
以下是一个具体的示例,假设有一个名为"Students"的表,其中包含"StudentID"、"FirstName"、"LastName"和"Age"等列。现在要将ID为1的学生的名字改为"Jane",年龄改为21:
UPDATE Students
SET FirstName = 'Jane', Age = 21
WHERE StudentID = 1;
上述语句将更新满足条件的记录,即StudentID为1的学生的FirstName和Age列将被更新为新的值。请注意,根据实际情况,您可能需要根据需要调整列名、新值和条件。
其他操作
除了增删改查还有以下常用的操作:
1、创建表(CREATE TABLE):用于在数据库中创建新的表。您可以使用CREATE TABLE命令定义表的列、数据类型和其他属性。
2、删除表(DROP TABLE):用于从数据库中删除表。您可以使用DROP TABLE命令删除指定的表。
3、创建索引(CREATE INDEX):用于在表的列上创建索引。索引可以提高数据查询的性能。
4、删除索引(DROP INDEX):用于从表中删除索引。
5、创建视图(CREATE VIEW):用于创建数据库中的视图。视图是一个虚拟表,它基于存储的查询结果进行定义,可以用于简化复杂的查询操作。
6、删除视图(DROP VIEW):用于从数据库中删除视图。
这些操作是SQL中常见的操作,可以帮助您管理数据库和操作数据。
上位机开发连接SQL,及SQL命令处理,在C#开发中连接SQL数据库并进行命令处理,通常涉及以下步骤:
1、安装并引入必要的命名空间
在项目中引入System.Data.SqlClient命名空间,这是.NET用于与SQL Server交互的主要命名空间。
using System.Data.SqlClient;
2、建立数据库连接
使用SqlConnection类来建立与数据库的连接。在连接字符串中,需要提供数据库的地址、用户名、密码以及数据库名称。
string connectionString = "Server=服务器地址;Database=数据库名称;User Id=用户名;Password=密码;";
SqlConnection connection = new SqlConnection(connectionString);
3、打开数据库连接
使用Open()方法打开数据库连接。
connection.Open();
4、执行SQL命令
使用SqlCommand类来执行SQL命令。你可以使用ExecuteNonQuery()方法执行不返回结果集的命令,如INSERT、UPDATE、DELETE等,或者使用ExecuteReader()方法执行返回结果集的命令,如SELECT。
string sql = "SELECT * FROM 表名";
SqlCommand command = new SqlCommand(sql, connection);
SqlDataReader reader = command.ExecuteReader();
5、处理结果
根据执行的是ExecuteNonQuery还是ExecuteReader,处理结果的方式不同。对于前者,通常关注返回受影响行数;对于后者,可以使用Read()方法逐行读取结果集。
int rowsAffected = command.ExecuteNonQuery();
Console.WriteLine($"Rows affected: {rowsAffected}");
while (reader.Read())
{
Console.WriteLine($"{reader["列名1"]}, {reader["列名2"]}, ...");
}
6、关闭连接
在完成数据库操作后,记得关闭数据库连接。
connection.Close();
以上是基本的流程。在实际开发中,你可能还需要处理异常、使用参数化查询等,以提高程序的健壮性和安全性。
END
