SqlCommand还是SqlDataAdapter?
我正在创建类似小型收银员应用程序的东西,记录客户,员工,服务,销售和约会。 我正在使用Windows窗体,并在DataGrids中。 我已经创建了我将要用于该应用程序的数据库。 我想知道我是否应该使用SqlCommand-SqlDataReader或SqlDataAdapter-DataSet。 哪种方法更好?
这在很大程度上取决于您想要的操作类型。
以下是我的建议。
-
如果你想更快地读取数据,请转到SQLDataReader,但这也是在读取之后需要花费的操作成本。 打开连接读取数据关闭连接。 如果你忘了关闭它会达到性能。
-
转到SQLDataAdapter
- 如果您想更快地阅读并使用Disconnected Arch的好处。 ADO.net
- 这将自动关闭/打开连接。
- 此外,它还允许您自动将DataSet中的更新处理回DataBase。 (SqlCommandBuilder)
-
使用SQLCommand(当您读取SQLDataReader以读取数据时也会出现这种情况)以及插入和更新。
- 这将为您提供更好的插入和更新性能。
如果您使用的是.NET Frame 3.5 sp1或更高版本,我建议Linq to SQL或Entity Framework也可以解决您的目的。
谢谢。
SqlDataAdapter
- 在您的客户端上存储数据并根据需要更新数据库。 所以它消耗更多的内存。
- 另一方面,您不需要在
insert/delete/update/select
命令上连接到数据库。 - 它在内部管理连接,因此您不必担心这一点。
来自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
可能值得考虑,但通常只有在数据集中已有数据时才会考虑。 否则,有更快/更好的做事方式。
如果您了解这些组件(Core ADO.NET)(Command,Connection,DataAdapter),那么我建议Entity Data Model
或Linq-SQL
。
SqlDataAdapter
是辅助类,它隐式使用SqlCommand
, SqlConnection
和SqlDataReader
。
DataReader – datareader是来自数据库的仅向前,只读数据流。 这使得datareader成为一种非常有效的检索数据的方法,因为一次只有一条记录被带入内存。 缺点:连接对象一次只能包含一个datareader,因此我们必须在完成后明确关闭datareader。 这将释放连接用于其他用途。 数据适配器对象将管理打开和关闭要执行的命令的连接
DataAdapter – 表示一组SQL命令和数据库连接,用于填充DataSet和更新数据源。 它充当DataSet和数据源之间的桥梁,用于检索和保存数据。 DataAdapter通过映射Fill来提供此桥接,Fill更改DataSet中的数据以匹配数据源中的数据,以及Update,它更改数据源中的数据以匹配DataSet中的数据。 通过使用它,DataAdapter还可以在需要时自动打开和关闭连接。
SQL命令更容易但不自动化。 SQL数据适配器不太容易,但自动化。
*自动化意味着它自动管理服务器的打开和关闭等。
它们都在Data上具有相同的function