1、**C# 简介**:C#(读作“C Sharp”)是由微软开发的一种面向对象的编程语言,广泛应用于 Windows 应用程序、Web 应用程序和移动应用程序的开发,它具有简洁的语法、强大的功能和丰富的类库,深受开发者喜爱。
2、数据库基础:数据库是用于存储和管理数据的系统,常见的数据库类型包括关系型数据库(如 SQL Server、MySQL、Oracle 等)和非关系型数据库(如 MongoDB、Redis 等),在 C# 中,我们主要使用关系型数据库来存储和管理数据。
3、**C# 与数据库交互的方式**:在 C# 中,与数据库交互通常使用 ADO.NET(ActiveX Data Objects for .NET)技术,ADO.NET 提供了一组类和接口,用于连接到数据库、执行命令、读取数据等操作。
组件名称 | 描述 |
Connection | 用于建立与数据库的连接,不同的数据库有不同的连接字符串格式。 |
Command | 用于执行 SQL 语句或存储过程,可以是 SqlCommand、OleDbCommand 等具体类型。 |
DataReader | 用于只读方式读取数据,适合一次读取一行数据的场景。 |
DataAdapter | 用于填充 DataSet 或 DataTable,支持批量更新操作。 |
DataSet/DataTable | DataSet 是一个数据集容器,可以包含多个 DataTable;DataTable 是一个内存中的表,具有行和列。 |
1、引入命名空间:在使用 ADO.NET 之前,需要引入相应的命名空间,对于 SQL Server 数据库,通常引入System.Data.SqlClient
。
2、创建连接字符串:连接字符串包含了连接到数据库所需的信息,如服务器地址、数据库名称、用户名和密码等。
string connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;";
3、创建并打开连接:使用SqlConnection
类创建连接对象,并调用Open
方法打开连接。
using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); // 在这里执行数据库操作 }
1、创建命令对象:使用SqlCommand
类创建命令对象,并指定要执行的 SQL 语句或存储过程。
SqlCommand command = new SqlCommand("SELECT * FROM Users", connection);
2、执行命令:可以使用ExecuteReader
方法读取数据,或者使用ExecuteNonQuery
方法执行不返回结果的命令(如 INSERT、UPDATE、DELETE)。
// 使用 DataReader 读取数据 using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { Console.WriteLine(reader["ColumnName"].ToString()); } } // 执行不返回结果的命令 int rowsAffected = command.ExecuteNonQuery();
五、使用 DataAdapter 填充 DataSet
1、创建 DataAdapter 对象:DataAdapter 用于将数据从数据库读取到 DataSet 或 DataTable 中。
SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Users", connection);
2、创建 DataSet 并填充数据:使用 DataAdapter 的Fill
方法将数据填充到 DataSet 中。
DataSet dataSet = new DataSet(); adapter.Fill(dataSet, "Users");
3、遍历 DataSet:可以通过 DataSet 的Tables
属性访问填充的数据表,并通过Rows
属性遍历表中的行。
foreach (DataRow row in dataSet.Tables["Users"].Rows) { Console.WriteLine(row["ColumnName"].ToString()); }
1、开始事务:在执行一系列相关的数据库操作时,为了确保数据的一致性和完整性,可以使用事务,通过调用Connection
对象的BeginTransaction
方法开始一个事务。
SqlTransaction transaction; connection.Open(); transaction = connection.BeginTransaction();
2、执行事务操作:在事务中执行多个数据库操作,如果所有操作都成功,则调用Commit
方法提交事务;如果有任何一个操作失败,则调用Rollback
方法回滚事务。
try { // 执行多个数据库操作 command1.ExecuteNonQuery(); command2.ExecuteNonQuery(); // 如果所有操作都成功,则提交事务 transaction.Commit(); } catch (Exception ex) { // 如果有任何操作失败,则回滚事务 transaction.Rollback(); Console.WriteLine("事务回滚: " + ex.Message); }
1、**问:如何在 C# 中连接到不同类型的数据库?
答:在 C# 中,可以通过引入不同的命名空间和使用相应的连接字符串来连接到不同类型的数据库,对于 SQL Server 数据库,引入System.Data.SqlClient
并使用SqlConnection
;对于 MySQL 数据库,引入MySql.Data.MySqlClient
并使用MySqlConnection
,连接字符串的格式因数据库类型而异,但通常包含服务器地址、数据库名称、用户名和密码等信息。
2、**问:如何在 C# 中使用参数化查询防止 SQL 注入攻击?
答:在 C# 中,可以使用参数化查询来防止 SQL 注入攻击,参数化查询允许将 SQL 语句中的参数值作为参数传递,而不是直接拼接到 SQL 语句中,这样可以避免反面用户通过输入特殊的 SQL 语句来改动查询逻辑,使用SqlCommand
的Parameters
属性可以添加参数,并设置参数的值和类型。
SqlCommand command = new SqlCommand("SELECT * FROM Users WHERE UserId = @UserId", connection); SqlParameter parameter = new SqlParameter("@UserId", SqlDbType.Int); parameter.Value = userId; command.Parameters.Add(parameter);
这样,即使用户输入了反面的参数值,也不会对 SQL 语句造成影响,从而有效防止了 SQL 注入攻击。
小编有话说:C# 与数据库的结合为开发者提供了强大的数据处理能力,无论是简单的数据查询还是复杂的事务处理,都能通过 ADO.NET 技术轻松实现,希望本文能帮助您快速掌握 C# 数据库编程的基础知识,为您的开发之路增添一份助力!