我正在创建类似小型收银应用程序的东西,用于记录客户,雇员,服务,销售和预约。我正在使用Windows表单以及其中的数据网格。我已经创建了我将在应用程序中使用的数据库。我想知道我应该使用SqlCommand-SqlDataReader还是SqlDataAdapter-DataSet。哪种方法更好?
我正在创建类似小型收银应用程序的东西,用于记录客户,雇员,服务,销售和预约。我正在使用Windows表单以及其中的数据网格。我已经创建了我将在应用程序中使用的数据库。我想知道我应该使用SqlCommand-SqlDataReader还是SqlDataAdapter-DataSet。哪种方法更好?
这高度取决于您想要执行的操作类型。
以下是我的建议。
如果您希望更快地读取数据,请选择SQLDataReader,但这需要在读取之后进行操作。
开放连接
读取数据
关闭连接。 如果忘记关闭连接,则会影响性能。
选择SQLDataAdapter
使用SQLCommand(当您读取SQLDataReader以读取数据时,它也会出现)以及插入和更新。
如果您使用的是.NET Framework 3.5 sp1或更高版本,则建议使用Linq to SQL或Entity Framework也可以达到您的目的。
谢谢。
SqlDataAdapter
SqlDataAdapter
会将数据存储在客户端并根据需要更新数据库。因此,它消耗更多的内存。insert/delete/update/select
命令中,您不需要连接到数据库。SqlDataAdapter
在内部管理连接,因此您不必担心这个问题。SqlDataAdapter
提供良好的功能是以更多的内存消耗为代价的。通常用于需要多个用户连接到数据库的系统。
因此,如果您不处于这种情况,请选择SqlCommand
和连接模式。
SqlDataReader
速度更快。您还可以将其与DataSet
结合使用。如果您使用using
语句包装数据访问对象,则运行时会为您处理连接清理逻辑。DataTable result = new DataTable();
using (SqlConnection conn = new SqlConnection(MyConnectionString))
{
using (SqlCommand cmd = new SqlCommand(MyQueryText, conn))
{
// set CommandType, parameters and SqlDependency here if needed
conn.Open();
using (SqlDataReader reader = cmd.ExecuteReader())
{
result.Load(reader);
}
}
}
如果要进行更新/删除/插入操作,考虑使用SqlDataAdapter
可能是值得的,但通常仅当您已经将数据放在DataSet
中时才需要。否则,有更快速/更好的方法来完成这些事情。
如果您了解这些组件(Core ADO.NET)(Command、Connection、DataAdapter),那么我建议使用Entity Data Model
或Linq-SQL
。
SqlDataAdapter
是一个帮助类,它隐式地使用SqlCommand
、SqlConnection
和SqlDataReader
。
DataReader – DataReader是一种只向前、只读的数据流,从数据库中检索数据非常高效,因为每次只有一条记录被带入内存。缺点是:连接对象一次只能包含一个DataReader,所以我们必须在使用完后显式关闭DataReader,这将释放连接供其他用途使用。DataAdapter对象将管理打开和关闭连接以执行命令。
DataAdapter – 表示一组SQL命令和数据库连接,用于填充DataSet并更新数据源。它作为DataSet和数据源之间的桥梁,用于检索和保存数据。DataAdapter通过映射Fill(将DataSet中的数据更改为与数据源匹配的数据)和Update(将数据源中的数据更改为与DataSet中的数据匹配的数据)来提供此桥梁。通过使用DataAdapter,DataAdapter也会根据需要自动打开和关闭连接。
SQL命令更易于操作,但不自动化。SQL数据适配器不太容易,但是自动化。
*自动化意味着它可以自动管理服务器的打开和关闭等操作。
它们两者在数据方面具有相同的功能。