在C#中进行数据库访问是开发应用程序时非常常见的任务,它允许程序与数据库进行交互,执行各种数据操作,以下是对C#数据库访问的归纳:
一、数据库连接
1、选择数据库连接类
SqlConnection:用于连接SQL Server数据库,是最常用的连接类之一。string connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;"; SqlConnection conn = new SqlConnection(connectionString);
。
OleDbConnection:适用于连接早期的数据库系统,如Access等,其连接字符串格式为:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=myDatabase.mdb;User Id=admin;Password=;
。
OdbcConnection:用于连接支持ODBC的数据库,如MySQL、PostgreSQL等,连接字符串格式为:Driver={MySQL ODBC 8.0 Unicode Driver};Server=myServerAddress;Database=myDataBase;User=myUsername;Password=myPassword;
。
OracleConnection:专门用于连接Oracle数据库,需要引用System.Data.OracleClient命名空间,并添加对Oracle客户端软件的引用。
2、连接数据库
使用连接类的Open方法打开数据库连接,conn.Open();
,在操作完成后,应使用Close方法关闭连接,以释放资源,如:conn.Close();
。
二、执行SQL命令
1、SqlCommand对象
创建SqlCommand对象来执行SQL命令,需要指定要执行的SQL语句和连接对象。string sql = "SELECT * FROM Users"; SqlCommand cmd = new SqlCommand(sql, conn);
。
可以使用Parameters属性向SQL命令中添加参数,以防止SQL注入攻击。cmd.Parameters.AddWithValue("@UserName", "John");
。
2、执行查询
ExecuteNonQuery:用于执行不返回结果集的命令,如INSERT、UPDATE、DELETE等。int rowsAffected = cmd.ExecuteNonQuery();
。
ExecuteReader:用于执行SELECT查询,返回一个SqlDataReader对象,通过它可以遍历查询结果。SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { Console.WriteLine(reader["ColumnName"].ToString()); }
。
ExecuteScalar:用于执行返回单个值的查询,如聚合函数COUNT、SUM等。int count = (int)cmd.ExecuteScalar();
。
三、读取数据
1、使用SqlDataReader
SqlDataReader提供了一种向前读取数据行的方式,只能读取,不能写入,在读取数据时,可以通过字段名称或索引来获取字段值。string userName = reader["UserName"].ToString();
或string userName = reader[0].ToString();
。
读取完数据后,应及时关闭SqlDataReader对象,以释放资源。reader.Close();
。
2、使用DataTable
可以将SqlDataReader中的数据填充到DataTable中,以便更方便地操作数据。DataTable dt = new DataTable(); dt.Load(reader);
。
可以使用DataTable的Rows属性来遍历数据行,使用Columns属性来获取列信息。foreach (DataRow row in dt.Rows) { Console.WriteLine(row["UserName"].ToString()); }
。
四、事务处理
1、开始事务
使用连接对象的BeginTransaction方法开始一个事务。SqlTransaction transaction = conn.BeginTransaction();
。
2、提交事务
如果所有的操作都成功完成,使用事务对象的Commit方法提交事务。transaction.Commit();
。
3、回滚事务
如果在事务过程中出现错误,使用事务对象的Rollback方法回滚事务,以撤销所有的操作。transaction.Rollback();
。
五、异常处理
1、使用try-catch块
在进行数据库操作时,应使用try-catch块来捕获可能出现的异常,并进行相应的处理。try { ... } catch (Exception ex) { Console.WriteLine("Error: " + ex.Message); }
。
2、常见异常类型
SqlException:表示SQL错误,如语法错误、连接失败等。
InvalidOperationException:表示无效的操作,如在已关闭的连接上执行命令等。
FormatException:表示格式错误,如日期格式不正确等。
C#中的数据库访问涉及多个方面,包括数据库连接、执行SQL命令、读取数据、事务处理和异常处理等,开发人员需要根据具体的需求选择合适的连接方式和操作方法,并注意异常的处理,以确保数据库操作的稳定性和安全性。