DataReader、DataSet、DataAdapter和DataView是数据访问中常用的几个对象,下面我会详细介绍它们的作用和使用方法。
一、DataReader
DataReader是一种只读的、前向的数据流,用于对数据库进行查询操作。它可以一行一行地读取查询结果,不支持对数据进行修改,适用于大数据量查询,可以最大程度减少内存占用。使用DataReader进行数据读取的基本步骤如下:
- 使用Connection对象打开数据库连接。
- 创建Command对象并设置CommandText属性为查询语句。
- 使用Command对象创建DataReader对象,通过ExecuteReader方法执行查询。
- 调用DataReader对象的Read方法进行数据读取,直到Read返回false,则表示已读取完所有数据。
- 使用DataReader对象的GetXXX方法(如GetBoolean、GetInt32等方法)获取当前行指定列的值。
以下是一个示例代码,用于从数据库中读取数据并输出到控制台:
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand("SELECT * FROM Students", conn))
{
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine("{0}\t{1}\t{2}", reader.GetInt32(0), reader.GetString(1), reader.GetInt32(2));
}
}
}
}
二、DataSet
DataSet是一个数据缓存对象,用于存储查询结果和关系型数据。它可以将查询结果存储到内存中,支持对数据进行修改、排序、过滤等操作,并可以将修改后的数据保存到数据库中。使用DataSet进行数据读取的基本步骤如下:
- 使用Connection对象打开数据库连接。
- 创建Command对象并设置CommandText属性为查询语句。
- 使用DataAdapter对象(下面会介绍)的Fill方法,将查询结果填充到DataSet中。
- 使用DataSet对象的Tables属性获取数据表,使用Rows属性获取数据行,使用Columns属性获取数据列。
- 修改DataSet中的数据。
- 使用DataAdapter对象的Update方法,将修改后的数据保存到数据库中。
以下是一个示例代码,用于从数据库中读取数据并将修改后的数据保存到数据库中:
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand("SELECT * FROM Students", conn))
{
using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
{
DataSet ds = new DataSet();
adapter.Fill(ds);
foreach (DataRow row in ds.Tables[0].Rows)
{
row["Score"] = (int)row["Score"] + 10; // 修改数据
}
SqlCommandBuilder builder = new SqlCommandBuilder(adapter); // 自动生成更新语句
adapter.Update(ds); // 保存修改后的数据到数据库中
}
}
}
三、DataAdapter
DataAdapter是一个连接数据库和DataSet之间的桥梁,用于填充DataSet和将修改后的数据保存到数据库中。它可以执行查询操作、插入操作、更新操作和删除操作,支持对数据进行排序、过滤等操作。使用DataAdapter进行数据读取和保存的基本步骤如下:
- 使用Connection对象打开数据库连接。
- 创建Command对象并设置CommandText属性为查询语句或更新语句。
- 创建DataAdapter对象,并使用Command属性设置DataAdapter对象的查询命令或更新命令。
- 使用DataAdapter对象的Fill方法,将查询结果填充到DataSet中(若是更新操作,则无需Fill)。
- 修改DataSet中的数据。
- 使用DataAdapter对象的Update方法,将修改后的数据保存到数据库中。
以下是一个示例代码,用于使用DataAdapter执行查询和插入操作:
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
using (SqlDataAdapter adapter = new SqlDataAdapter())
{
adapter.SelectCommand = new SqlCommand("SELECT * FROM Students", conn);
adapter.InsertCommand = new SqlCommand("INSERT INTO Students (Name, Age, Score) VALUES (@Name, @Age, @Score)", conn);
adapter.InsertCommand.Parameters.Add("@Name", SqlDbType.NVarChar, 50, "Name");
adapter.InsertCommand.Parameters.Add("@Age", SqlDbType.Int, 0, "Age");
adapter.InsertCommand.Parameters.Add("@Score", SqlDbType.Int, 0, "Score");
DataSet ds = new DataSet();
adapter.Fill(ds); // 将查询结果填充到DataSet中
DataRow row = ds.Tables[0].NewRow(); // 创建新行
row["Name"] = "David";
row["Age"] = 20;
row["Score"] = 80;
ds.Tables[0].Rows.Add(row);
adapter.Update(ds); // 将新行插入到数据库中
}
}
四、DataView
DataView是基于DataSet的一个数据视图对象,用于对DataSet中的数据进行排序、过滤等操作。它可以将DataSet中的数据按照指定的条件进行排序,或者根据指定的条件进行筛选。使用DataView进行数据筛选的基本步骤如下:
- 使用Connection对象打开数据库连接。
- 创建Command对象并设置CommandText属性为查询语句。
- 使用DataAdapter对象将查询结果填充到DataSet中。
- 使用DataSet对象的Tables属性获取数据表,使用DefaultView属性获取数据视图。
- 使用DataView对象的Sort属性和RowFilter属性,对数据进行排序和筛选。
以下是一个示例代码,用于排序和筛选DataSet中的数据:
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
using (SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Students", conn))
{
DataSet ds = new DataSet();
adapter.Fill(ds); // 将查询结果填充到DataSet中
DataView dv = ds.Tables[0].DefaultView; // 获取数据视图
dv.Sort = "Score DESC"; // 按Score降序排列
dv.RowFilter = "Age > 18"; // 筛选年龄大于18的数据
foreach (DataRowView row in dv)
{
Console.WriteLine("{0}\t{1}\t{2}", row["Id"], row["Name"], row["Score"]);
}
}
}
以上就是对DataReader、DataSet、DataAdapter和DataView的详细介绍和使用方法,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:DataReader、DataSet、DataAdapter和DataView使用介绍 - Python技术站