使用C#和ADO.NET访问基于SQL的数据

ADO.NET是类框架,它允许访问数据,并且为.NET应用程序提供直接途径获取必要信息。本文中,我介绍了如何使用C#和ADO.NET访问基于SQL-Sever的数据。本文中用到一个用C#语言编写的简单示例。

连接

连接是数据访问的开始之处,并且决定如何连接到数据源。此时需要对属性进行设置,(例如ConnectionString),与数据源建立联系。下面列出了连接的关键属性和方法。

关键属性

  • ConnectionString: (读/写)用于打开SQL Sever数据库的字符串。
  • ConnectionTimeout:(读)尝试连接的最大时间限制。
  • Database: (读)当前已连接(或正在连接)的数据库名字。
  • DataSource:(读)需要连接的SQL Sever实例名字。
  • ServerVersion:(读)已连接的SQL Sever实例的验证版本字符串。
  • State:(读)当前的连接状态。

关键方法

  • BeginTransaction:(超载)开始一个数据库事务。
  • ChangeDatabase: 为SqlConnection 更改当前数据库。
  • Close: 关闭数据库连接。
  • CreateCommand: 创建并返回与SqlConnection 关联的SqlCommand 对象。
  • Open: 通过恰当设置ConnectionString 属性打开数据库连接。

命令

ADO.NET命令对于存储过程和SQL声明的运行是很重要的。下面给出了命令的关键属性和方法。

关键属性

  • CommandText:(读/写)T-SQL声明或存储的过程。
  • CommandTimeout:(读/写)命令执行所允许的最大时间限制。
  • CommandType:(读/写)解释CommandText属性的指示值。
  • Connection:(读/写)SqlCommand 实例所用到的SqlConnection。
  • Parameters:(读)SqlParameterCollection。
  • Transaction:(读/写)SqlCommand命令所执行的事务。

关键方法

  • Cancel:取消执行SqlCommand命令。
  • CreateParameter:创建SqlParameter对象的一个新实例。
  • ExecuteNonQuery:执行T-SQL 声明并且返回受影响的行数。
  • ExecuteReader:(超载)发送CommandText 给连接,并且建立SqlDataReader。
  • ExecuteScalar:执行查询,并且返回查询结果集的第一行第一列值。
  • ExecuteXmlReader:发送CommandText给连接,并且建立一个 XmlReader 对象。
  • Prepare:在SQL Sever实例上创建命令的准备版本。

数据适配器

DataAdapter是一个对象,用于沟通数据源和DataSet对象,所以它可以恢复和更新。

关键属性

  • AcceptChangesDuringFill:(读/写)值,此值指示在DataRow上是否调用AcceptChanges的情况,而此时的DataRow已经被添加到DataTable。
  • TableMappings:(读)在数据源表和DataTable之间提供主要映射集。

关键方法

  • Fill:添加并刷新DataSet中的行,与数据源中使用DataSet名字的行进行匹配;并且创建命名为“Table”的DataTable。
  • FillSchema:向指定的DataSet中添加命名为“Table”的DataTable,并且设置大纲与数据源中指定的SchemaType 大纲相匹配。
  • GetFillParameters:在执行SQL选择命令时,由用户恢复参数集。
  • Update:对于来自名为“Table”的DataTable中的DataSet,为其相应的动作调用相应的命令,如:插入、更新和删除等等。

数据访问基础

在.NET框架内采用ADO.NET进行工作时,需要用到两个System.Data命名空间中的一个:System.Data.SQLClient或者System.Data.OleDB。采用何种命名空间取决于需要访问的数据库。如果访问SQL Sever数据库,则应该使用System.Data.SQLClient命名空间;如果访问其他类型的数据库,则使用System.Data.OleDB命名空间。

代码定义了OleDbConnectionconn的一个实例。在ConnectionString属性中,指定了数据源提供者(Microsoft.JET.OLEDB版本4),以及数据源的位置和名称(Northwind.mdb S Access 数据库)。接下来,创建了Command对象的实例,并且设置其CommandText属性为实际的SQL字符串。然后打开连接,利用命令对象的ExecuteScalar方法返回记录集的第一个值,并且将其显示在消息框中。在try/catch块内部打开连接;如果出现错误,消息框中则出现出错信息。在finally块中,代码释放connection对象