SqlCommand还是SqlDataAdapter?

我正在创建类似小型收银员应用程序的东西,记录客户,员工,服务,销售和约会。 我正在使用Windows窗体,并在DataGrids中。 我已经创建了我将要用于该应用程序的数据库。 我想知道我是否应该使用SqlCommand-SqlDataReader或SqlDataAdapter-DataSet。 哪种方法更好?

这在很大程度上取决于您想要的操作类型。

以下是我的建议。

  1. 如果你想更快地读取数据,请转到SQLDataReader,但这也是在读取之后需要花费的操作成本。 打开连接读取数据关闭连接。 如果你忘了关闭它会达到性能。

  2. 转到SQLDataAdapter

    • 如果您想更快地阅读并使用Disconnected Arch的好处。 ADO.net
    • 这将自动关闭/打开连接。
    • 此外,它还允许您自动将DataSet中的更新处理回DataBase。 (SqlCommandBuilder)
  3. 使用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 ModelLinq-SQL

SqlDataAdapter是辅助类,它隐式使用SqlCommandSqlConnectionSqlDataReader

DataReader – datareader是来自数据库的仅向前,只读数据流。 这使得datareader成为一种非常有效的检索数据的方法,因为一次只有一条记录被带入内存。 缺点:连接对象一次只能包含一个datareader,因此我们必须在完成后明确关闭datareader。 这将释放连接用于其他用途。 数据适配器对象将管理打开和关闭要执行的命令的连接

DataAdapter – 表示一组SQL命令和数据库连接,用于填充DataSet和更新数据源。 它充当DataSet和数据源之间的桥梁,用于检索和保存数据。 DataAdapter通过映射Fill来提供此桥接,Fill更改DataSet中的数据以匹配数据源中的数据,以及Update,它更改数据源中的数据以匹配DataSet中的数据。 通过使用它,DataAdapter还可以在需要时自动打开和关闭连接。

SQL命令更容易但不自动化。 SQL数据适配器不太容易,但自动化。

*自动化意味着它自动管理服务器的打开和关闭等。

它们都在Data上具有相同的function