SQL Server (SMSS) 表与列增删查改基础

1. 前言

SQL Server Management Studio (SMSS) 是管理和操作 SQL Server 数据库的官方图形化工具。对于数据库开发和管理人员而言,掌握在 SMSS 中对表和列进行增删查改(CRUD)的基础操作,以及如何在 C# 应用程序(特别是低版本 .NET 环境)中连接并操作 SQL Server 数据库,是一项核心技能。本文将详细介绍这两部分内容,旨在为初学者和需要回顾的开发者提供清晰的指引。

2. SMSS 中对表的基础操作

在 SMSS 中,大部分操作可以通过图形界面完成,但了解其背后的 SQL 语句同样重要。

2.1 创建表 (Create)

在“对象资源管理器”中,右键点击目标数据库下的“表”文件夹,选择“新建表”。在弹出的设计器中,可以定义列名、数据类型、是否允许 NULL 值等。完成后点击“保存”按钮(或按 Ctrl+S),输入表名即可。

对应的 SQL 语句如下:

CREATE TABLE Employees ( EmployeeID INT PRIMARY KEY IDENTITY(1,1), FirstName NVARCHAR(50) NOT NULL, LastName NVARCHAR(50) NOT NULL, BirthDate DATE, DepartmentID INT, HireDate DATETIME DEFAULT GETDATE() );

2.2 查询表结构与数据 (Read)

查看表结构:右键点击表名,选择“设计”,即可查看和修改列定义。

查看表数据:右键点击表名,选择“选择前1000行”。

对应的 SQL 查询语句:

-- 查询所有列 SELECT * FROM Employees; -- 查询特定列 SELECT EmployeeID, FirstName, LastName FROM Employees; -- 带条件查询 SELECT * FROM Employees WHERE DepartmentID = 3;

2.3 修改表结构 (Alter)

添加列:在设计视图中,在最后一行下方直接添加新列定义并保存。

ALTER TABLE Employees ADD Email NVARCHAR(100);

修改列:在设计视图中直接修改列的数据类型或属性(注意:某些修改可能导致数据丢失)。

ALTER TABLE Employees ALTER COLUMN FirstName NVARCHAR(100);

删除列:在设计视图中,右键点击要删除的列,选择“删除列”。

ALTER TABLE Employees DROP COLUMN Email;

2.4 删除表 (Delete)

右键点击表名,选择“删除”。在删除对话框中,可以查看依赖关系并确认删除。

DROP TABLE Employees;

警告:此操作将永久删除表及其所有数据,请谨慎操作。

3. SMSS 中对表中数据的增删查改

除了表结构,对表中数据的操作更为频繁。

3.1 插入数据 (Insert)

INSERT INTO Employees (FirstName, LastName, DepartmentID) VALUES ('张', '三', 1), ('李', '四', 2);

3.2 更新数据 (Update)

UPDATE Employees SET DepartmentID = 5, HireDate = GETDATE() WHERE EmployeeID = 10;

注意:务必使用 WHERE 子句限定要更新的行,否则将更新整个表。

3.3 删除数据 (Delete)

DELETE FROM Employees WHERE EmployeeID = 15;

注意:同样要谨慎使用 WHERE 子句。如果想清空整个表但保留结构,可以使用TRUNCATE TABLE Employees;,速度更快且不记录日志。

4. 在低版本 C# 中操作 SQL Server 数据库

对于 .NET Framework 2.0/3.5 等低版本环境,我们使用 ADO.NET 的核心类库进行数据库操作。主要步骤为:连接、执行命令、处理结果、关闭连接。

4.1 环境准备与引用

确保项目中已引用System.DataSystem.Data.SqlClient命名空间。

using System.Data; using System.Data.SqlClient;

4.2 连接数据库

使用SqlConnection对象,连接字符串通常包含服务器地址、数据库名、认证方式等信息。

string connectionString = "Server=localhost;Database=MyDB;User Id=sa;Password=yourpassword;"; // 或者使用Windows身份验证:"Server=localhost;Database=MyDB;Integrated Security=True;" using (SqlConnection connection = new SqlConnection(connectionString)) { try { connection.Open(); Console.WriteLine("连接成功!"); // ... 后续操作 } catch (SqlException ex) { Console.WriteLine("连接失败: " + ex.Message); } } // using 语句确保连接被关闭和释放

4.3 执行查询 (Read) 并读取数据

使用SqlCommandSqlDataReader

string sql = "SELECT EmployeeID, FirstName, LastName FROM Employees WHERE DepartmentID = @DeptID"; using (SqlCommand command = new SqlCommand(sql, connection)) { command.Parameters.AddWithValue("@DeptID", 3); // 参数化查询,防止SQL注入 using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { int id = reader.GetInt32(0); // 按列索引 string firstName = reader.GetString(1); // 或者按列名:string lastName = reader["LastName"].ToString(); Console.WriteLine($"ID: {id}, Name: {firstName} {reader["LastName"]}"); } } }

4.4 执行非查询操作 (Insert, Update, Delete)

使用ExecuteNonQuery方法,它返回受影响的行数。

// 插入数据 string insertSql = @"INSERT INTO Employees (FirstName, LastName, DepartmentID) VALUES (@FirstName, @LastName, @DeptID)"; using (SqlCommand cmd = new SqlCommand(insertSql, connection)) { cmd.Parameters.AddWithValue("@FirstName", "王"); cmd.Parameters.AddWithValue("@LastName", "五"); cmd.Parameters.AddWithValue("@DeptID", 4); int rowsAffected = cmd.ExecuteNonQuery(); Console.WriteLine($"插入了 {rowsAffected} 行。"); } // 更新和删除操作类似,只需更改SQL语句和参数

4.5 使用 DataSet 和 SqlDataAdapter (离线操作)

低版本中常用DataSet在内存中缓存数据,便于离线操作后批量更新回数据库。

string adapterSql = "SELECT * FROM Employees;"; SqlDataAdapter adapter = new SqlDataAdapter(adapterSql, connection); SqlCommandBuilder builder = new SqlCommandBuilder(adapter); // 自动生成增删改命令 DataSet ds = new DataSet(); adapter.Fill(ds, "Employees"); // 将数据填充到DataSet的“Employees”表中 // 在内存中对 ds.Tables["Employees"] 进行修改(增删改行) // 将修改更新回数据库 adapter.Update(ds, "Employees");

5. 注意事项与最佳实践

  • 使用参数化查询:如上例所示,永远不要拼接SQL字符串,以防止SQL注入攻击。
  • 管理连接资源:使用using语句确保SqlConnection,SqlCommand,SqlDataReader被及时关闭和释放。
  • 异常处理:使用try-catch块捕获SqlException,并给出友好的错误提示。
  • 连接字符串配置:应将连接字符串存储在配置文件(如App.configWeb.config)中,而不是硬编码在程序里。
  • SMSS 操作备份:在生产环境执行删除表或列、更新大量数据等危险操作前,务必先备份数据或在一个安全的环境测试。

6. 总结

本文介绍了在 SMSS 中对数据库表和列进行增删查改的图形化与SQL语句操作,并详细说明了如何在C# (.NET Framework) 中使用 ADO.NET 的核心类来连接 SQL Server 并执行数据操作。掌握这些基础是进行更高级数据库编程和管理的基石。建议读者在理解的基础上,多动手实践,以加深印象。下面给出思维导图自行阅读