ADO.NET 中的命令(包含属性)

在 ADO.NET 中没有一般的 Connection 类,但是有可用的 Connection 类。其中有一个 DBConnection 类(其他提供程序特定的连接类从该类继承),但该类是抽象类。它适用于原型设计,但是不能直接用在应用程序中。

因此,为了打开某个连接,必须使用下列两种方法之一:SqlConnection 和 OleDbConnection。如果目标是 SQL Server 7.0、SQL Server 2000 或更高版本,请使用 SqlConnection。如果目标是 OLE DB 提供程序,请使用 OleDbConnection。如果仍需要通过 ODBC 驱动程序来访问数据,请使用 ODBC .NET 提供程序的连接类(名为 OdbcConnection)。

连接到数据源
正如所预期的那样,您需要一个连接对象来针对 SQL Server 数据库发出命令。从 Beta 2 开始,只能将连接指定为 SqlConnection 类的对象。无法再通过将连接字符串传递到命令来隐式创建连接对象。

strConnString = "DATABASE=MyDB;SERVER=localhost;UID=sa;";
SqlConnection conn = new SqlConnection(strConnString);
strCmdText = "INSERT INTO MyTable VALUES (1, '1', 'One')"
SqlCommand cmd = new SqlCommand(strCmdText, conn);

在上面的代码片段中,我创建了一个显式连接对象并将它与命令对象的新实例相关联。该连接对象还可以通过 SqlCommand 的 “连接” 属性来公开。

您可能希望在连接打开并准备工作之前设置一些属性。

cmd.Connection.Open();

在 ADO.NET 中,连接对象的 “打开” 方法不使用参数。

使用直接命令
在针对数据提供程序发出命令之前,请确保打开了连接。在默认情况下,不会自动打开连接。然后,执行命令并尽快关闭连接,使关键的资源可用于其他客户端。

SqlCommand 类提供执行命令的四种不同方法。它们是:ExecuteReader、ExecuteNonQuery、ExecuteScalar 和最新但同样重要的 ExecuteXmlReader。实质上,这些方法的区别仅在于它们所期望的输入类型及其所返回的结果。通常,在知道了要完成的操作之后,确定要使用的恰当方法相当简单。

顺便提一句,OleDbCommand 对象不支持 ExecuteXmlReader。

ExecuteReader 期望运行一个用来选择记录的查询命令或存储过程。它期望返回一个或多个结果集。

cmd.Connection.Open();
SqlDataReader dr = cmd.ExecuteReader();
// process the resultset(s) here
cmd.Connection.Close();

可以使用 SqlDataReader 对象来访问选定的记录,并使用 Read 方法来遍历它们,使用 NextResults 方法来移到下一个结果集。

ExecuteNonQuery 期望运行一个影响指定表的状态的命令或存储过程,即除查询命令以外的任何命令或存储过程。此方法通常用来发出 INSERT、UPDATE、DELETE、CREATE、SET 语句。

ExecuteNonQuery 只返回受到命令执行影响的行数,或者在该信息不可用时返回 –1。使用它将无法访问由该语句或存储过程生成的任何结果集。实际上,的确没有什么会阻止您将此方法用于查询命令,但是,在这种情况下,既得不到结果集,又得不到受影响的行数。

cmd.Connection.Open();
nRecsAffected = cmd.ExecuteNonQuery();
cmd.Connection.Close();
// check the record(s) affected here

受影响的行数还可以通过 SqlCommand 对象的 RecordsAffected 属性使用。在出现错误或者执行查询命令时,此属性等于 –1。

ExecuteScalar 期望运行一个查询命令,更有可能运行一个存储过程来返回数据。但是,此方法不同于 ExecuteReader,因为它只是使选定结果集第一行上的第一列作为标量值使用。

cmd.Connection.Open();
Object o = cmd.ExecuteScalar();
cmd.Connection.Close();
// work on the scalar here

该方法以装箱的对象形式返回值。然后,您负责取消装箱或者将该值强制转换为正确的预期类型。

当您针对一定量的数据完成统计或聚合操作时,ExecuteScalar 变得尤其有用。在这些情况以及类似情况下,您可能希望向调用方只返回一个值。根据其使用情况,通常针对具有不同复杂程度的存储过程(而非单个 SQL 语句)使用此方法。

在发出 SELECT 命令(利用 SQL Server 2000 中的 XML 功能)之后,ExecuteXmlReader 生成并返回 XmlReader 对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值