首页 > 编程 > .NET > 正文

ASP.NET 2.0中执行数据库操作命令之一

2024-07-10 13:07:40
字体:
来源:转载
供稿:网友
数据库命令执行时使用command对象。command类有三种:sqlcommand、oledbcommand与odbccommand。

  command对象主要用来运行select、insert、update或delete之类的sql语句。command对象还可以调用存储过程或从特定表中取得记录。

  datareader对象主要是用来读取数据结果,使用它读取记录时通常比从dataset更快。datareader类有三种:sqldatareader、oledbdatareader和odbcdatareader。datareader对象用commmand对象从数据库中读取记录,并且datareader对象只能向前的读取记录,用于在某些情况下替代dataset对象(dataset对象可以存储数据库中的行拷贝,可以在切断数据库的连接时处理这个拷贝,我们将在以后的章节中详细介绍该对象)。

  注意:不能用datareader修改数据库中的记录,它是采用向前的,只读的方式读取数据库。

  sqlcommand类

  sqlcommand对象用于对sql server数据库执行命令。oledbcommand对象用于对支持oledb的数据库执行命令,如oracle与access。odbccommand对象用于对支持odbc的数据库执行命令。尽管sqlcommand类是针对sql server的,但是这个类的许多属性、方法与事件和oledbcommand及odbccommand等类相似。本章将重点讲解sqlcommand特定的属性与方法,其他的command类你可以参考相应的帮助文档。

  注意:使用不同的command对象需要导入不同的命名空间。oledbcommand的命名空间为system.data.oledb。sqlcommand的命名空间为system.data.sqlclient。odbccommand的命名空间为system.data.odbc。

  sqlcommand属性:

属性 说明
commandtext 其返回类型为string, 获取或设置要对数据源执行的 sql 语句、存储过程或表。
commandtimeout 其返回类型为int,获取或设置在终止执行命令的尝试并生成错误之前的等待时间。
commandtype 其返回类型为commandtype,读取或设置表示commandtext属性将如何被解释的值,其有效的值可以为commandtype.text、commandtype.storedprocedur与commandtype.tabledirect,分别表示sql语句、存储过程调用或要读取的表,默认为text。
connection 其返回类型为string, 获取或设置 sqlcommand 的此实例使用的 sqlconnection。
parameters 其返回类型为sqlparametercollection,取得提供给命令的参数(如有)。

  sqlcommand方法:

方法 说明
cancle() 其返回类型为void,取消命令的执行
createparameter() 其返回类型为sqlparameter, 用于创建 sqlparameter 对象的新实例。
executenonquery() 其返回类型为int,执行不返回结果集的sql语句,包括insert、update与delete语句、ddl语句和不返回结果集的存储过程调用。返回的int值是命令影响的数据库行数。
executereader() 其返回类型为sqldatareader, 执行select语句、tabledirect命令或返回结果集的存储过程调用。在sqldatareader对象中返回结果集。
executescalar() 其返回类型为object,执行返回单个值的select语句(任何其他的值将被忽略)。这个命令结果作为对象被返回。
executexmlreader() 其返回类型为xmlreader,执行返回xml数据的select语句,用xmlreader对象返回结果集,只适用于sqlcommand类


 

生成sqlcommand对象

  我们可以用构造函数生成sqlcommand对象,也可以调用sqlconnection对象的createcommand()方法生成sqlcommand对象,下面分别介绍这两种方法。

  用构造函数生成sqlcommand对象

  sqlcommand对象的构造函数如下所示:

sqlcommand()
sqlcommand(string commandtext)
sqlcommand(string commandtext,sqlconnection mysqlconnection)

  程序代码说明:在上述语法范例的程序代码中,commandtext包含sql语句、存储过程调用或要读取的表。mysqlconnection是对应的sqlconnection对象。

  在使用sqlcommand对象之前,首先要确定一个sqlconnection对象,用于和sql server数据库进行数据传递。

mysqlconnection.connectionstring="server=localhost;database=northwind;
integrated security=sspi";

  然后可以用下列语句生成新的sqlcommand对象:

sqlcommand mysqlcommand=new sqlcommand();

  再将mysqlcommand对象的connection属性设置为mysqlconnection:

mysqlcommand.connection= mysqlconnection;

  这样mysqlcommand对象就可以使用mysqlconnection与数据库进行数据传递。现在,command对象的commandtype属性确定要执行的命令类型。可以用system.data.commandtype枚举值指定commandtype属性。
commandtype的枚举值如下表所示:

数值 说明
text 表示命令是sql语句,默认值是text
storedprocedure 表示命令是储存过程调用
tabledirect 表示被读取的行和列的表名。注意:sqlcommand对象不支持tabledirect,要使用其他的command类的对象。

  例如你可以采用如下的形式执行一个sql查询:

sqlcommand mysqlcommand=new sqlcommand();
mysqlcommand.connection=mysqlconnection;
mysqlcommand.commandtext=”select * from employees”;
//mysqlcommand.commandtype=commandtype.text;

  程序代码说明:在上述语法范例的程序代码中,我们设置了mysqlcommand对象的commandtext为一个select查询语句,并且指定了mysqlcommand对象的commandtype属性为commandtype.text,表示命令是sql语句。由于commandtype.text是默认的commandtype值,所以我们可以将其注译掉。

  还有一个更具效率的形式,那就是使用sqlcommand对象的其中一种构造函数:

sqlcommand mysqlcommand=new sqlcommand(”select * from employees”,myconnection);

  程序代码说明:在上述语法范例的程序代码中,我们可以直接利用sqlcommand(string commandtext,sqlconnection mysqlconnection) 构造函数,从而使得程序代码更加的简练和直观。

  还可以使用储存过程来查询所需要的数据,我们可以采用如下的代码形式:

sqlcommand mysqlcommand=new sqlcommand(”getempolyees”,myconnection);
mysqlcommand.commandtype=commandtype.storedprocedure;

  程序代码说明:在上述语法范例的程序代码中,getempolyees为一个储存过程名,用来实现所有的雇员信息查询。并且将commandtype值指定为storedprocedure,表示命令是储存过程调用。

  使用createcommand()方法生成sqlcommand对象

  如果不用构造函数,也可以使用sqlconnection对象的createcommand()方法生成sqlcommand对象。这个方法返回新的sqlcommand对象。例如:

sqlcommand mysqlcommand=mysqlconnection.createcommand();

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表