《 ASPNET数据库网站设计教程(C#版)》 配套教学资源 第7章使用NET数据提 供程序访问数据库 本章内容:NET数据提供程序概述,数据库的连接字符串,连接数据库的 Connection对象,执行数据库命令的 Command对象,读取数据的 Datareader对象,数 据读取器的 Data Adapter对象 本章重点: Connection对象, Command对象, Data Reader对象。 圖王出妖社
第7章 使用.NET数据提 供程序访问数据库 《ASP.NET数据库网站设计教程(C#版)》 配套教学资源 本章内容:.NET数据提供程序概述,数据库的连接字符串,连接数据库的 Connection对象,执行数据库命令的Command对象,读取数据的DataReader对象,数 据读取器的DataAdapter对象。 本章重点:Connection对象,Command对象,DataReader对象
74执行数据库命令的 Command对象 在连接好数据源后,就可以对数据源执行一些命令操作, 包括对数据的检索、插入、更新、删除、统计等。在 ADO.NET中,对数据库的命令操作是通过 Command对象 来实现的。从本质上讲, ADO.NET的 Command对象就是 SL命令或者对存储过程的引用。除了检索或更新数据命 令之外, Command对象还可用来对数据源执行一些不返回 结果集的査询命令,以及用来执行改变数据源结构的数据 定义命令 ■根据所用的 Net framework数据提供程序的不同, Command对象也分为4种: SqlCommand对象 OleDbCommand对象、 OdbcCommand对象和 Oraclecommand对象。在编程时应根据访问的数据源的不 同,选用相应的 Command对象
◼ 在连接好数据源后,就可以对数据源执行一些命令操作, 包括对数据的检索、插入、更新、删除、统计等。在 ADO.NET中,对数据库的命令操作是通过Command对象 来实现的。从本质上讲,ADO.NET的Command对象就是 SQL命令或者对存储过程的引用。除了检索或更新数据命 令之外,Command对象还可用来对数据源执行一些不返回 结果集的查询命令,以及用来执行改变数据源结构的数据 定义命令。 ◼ 根据所用的.Net Framework数据提供程序的不同, Command对象也分为4种:SqlCommand对象、 OleDbCommand对象、OdbcCommand对象和 OracleCommand对象。在编程时应根据访问的数据源的不 同,选用相应的Command对象。 7.4 执行数据库命令的Command对象
742创建 Command对象 ■ Command对象有两种创建方式 1.使用 Command对象的构造函数创建 Command对象 执行SO字符串时,使用构造函数创建 Sqlcommand对象, 并通过该对象的构造函数参数来设置特定属性值,其语法 格式如下: Sqlcommand命令对象名= new Sqlcommand("SQL字符 串",连接对象名 命令对象名:创建的 Command对象的名称。 例如: SqlCommand cmd new SqlCommand( SELECT FROM UserInfo,conn )
◼ 7.4.2 创建Command对象 ◼ Command对象有两种创建方式。 ◼ 1.使用Command对象的构造函数创建Command对象 ◼ 执行SQL字符串时,使用构造函数创建SqlCommand对象, 并通过该对象的构造函数参数来设置特定属性值,其语法 格式如下: ◼ SqlCommand 命令对象名= new SqlCommand("SQL字符 串", 连接对象名); ◼ 命令对象名:创建的Command对象的名称。 ◼ 例如: ◼ SqlCommand cmd = new SqlCommand( "SELECT * FROM UserInfo", conn );
也可以先使用构造函数创建一个空 Command对象,然后设置属性值。 这种方法对属性进行明确设置,能够使代码更易理解和调试。其语法 格式如下 SqlCommand命令对象名= new SqlCommandO;//创建一个空的命 令对象 命令对象名 Connection=连接对象名;//设置连接对象 ■命令对象名 Command Type= CommandType Text;//定义为使用 SQL语句,可省略 命令对象名 CommandText="SOL字符串";//定义要执行的SQL语 例如,下面的代码片段在功能上与第一种方法是等效的 SqlCommand cmd= new Sqlcommand(;/创建一个空的命令对象cmd ■ cmd Connection=conn;//设置连接对象,con是前面创建的连接对象 名 cmd CommandText=" SELECT* FROM USerInfo";//定义要执行的SQI 语句
◼ 也可以先使用构造函数创建一个空Command对象,然后设置属性值。 这种方法对属性进行明确设置,能够使代码更易理解和调试。其语法 格式如下: ◼ SqlCommand命令对象名= new SqlCommand(); //创建一个空的命 令对象 ◼ 命令对象名.Connection = 连接对象名; //设置连接对象 ◼ 命令对象名.CommandType= CommandType.Text; //定义为使用 SQL语句,可省略 ◼ 命令对象名.CommandText= "SQL字符串"; //定义要执行的SQL语 句 ◼ 例如,下面的代码片段在功能上与第一种方法是等效的: ◼ SqlCommand cmd = new SqlCommand(); //创建一个空的命令对象cmd ◼ cmd.Connection= conn; //设置连接对象,conn是前面创建的连接对象 名 ◼ cmd.CommandText= "SELECT * FROM UserInfo"; //定义要执行的SQL 语句
2.使用 Connection.对象的 Create Command0方法创建 Command对象 也可以使用 Connection对象的 Createcommand0方法创建用 于特定连接的 Command对象。 Command对象执行的SQ语 句可以使用 CommandTex属性进行配置。 使用 Connection对象的 Createcommand0方法创建 Sqlcommand对象的语法格式如下: Sqlcommand命令对象名=连接对象名 Create Commando 口命令对象名 Command Type= CommandType Text或 StoredProcedure;//SQL命令或存储过程 命令对象名 CommandText="SQL字符串或"存储过程 名
◼ 2.使用Connection对象的CreateCommand()方法创建 Command对象 ◼ 也可以使用Connection对象的CreateCommand()方法创建用 于特定连接的Command对象。Command对象执行的SQL语 句可以使用CommandText属性进行配置。 ◼ 使用Connection对象的CreateCommand()方法创建 SqlCommand对象的语法格式如下: ◼ SqlCommand 命令对象名= 连接对象名 .CreateCommand(); ◼ 命令对象名.CommandType= CommandType.Text 或 .StoredProcedure; //SQL命令或存储过程 ◼ 命令对象名.CommandText= "SQL字符串" 或 "存储过程 名";
例如,通过C oman d对象的 Commandtext属性来执行一条 SL语句,代码如下: string conn String Configuration Manager. Connection Strings["Conn Str" Connectio g COnnection conn new SqlConnection(conn String); //Elz Connection对象 conn string sqlstring=" SELECT* FROM USerInfo";/S①L字符串 SqlCommand cmd new SqlCommand(sqlString, conn);//EJ 建cmd对象,并初始化SOL字符串 或者使用 Connection对象的 Create Command0方法,将上面 最后一行代码改为如下两行代码 SqlCommand cmd= conn Create Command0;/创建 ommand对象:cmd cmd Commandtext= sqlstring;//初始化 Command对象的 S①L字符串
◼ 例如,通过Command对象的CommandText属性来执行一条 SQL语句,代码如下: ◼ string connString = ConfigurationManager.ConnectionStrings["ConnStr"].Connectio nString; ◼ SqlConnection conn = new SqlConnection(connString); //创建 Connection对象:conn ◼ string sqlString="SELECT * FROM UserInfo"; //SQL字符串 ◼ SqlCommand cmd = new SqlCommand(sqlString, conn); //创 建cmd对象,并初始化SQL字符串 ◼ 或者使用Connection对象的CreateCommand()方法,将上面 最后一行代码改为如下两行代码: ◼ SqlCommand cmd = conn.CreateCommand(); //创建 Command对象:cmd ◼ cmd.CommandText= sqlString; //初始化Command对象的 SQL字符串
743 Command对象的属性和方法 . Command对象的属性 ommand对象的常用属性及说明见表7-7。 表7-7 Command对象的常用属性及说明 属性 说明 Command 获取或设置 Command对象要执行命令的类型 类型值有:Text(默认)、 StoredProcedure或 TableDirect 1.Text:定义要使用SQL命令。 2. StoredProcedure:定义要使用存储过程。可以使用某一命令的 Parameters属性访问输入参数和 输出参数,并返回值(无论调用哪种 Execute方法)。当使用 ExecuteReader0方法时,在关闭 Datareader 对象后才能访问返回值和输出参数 当设置为 StoredProcedure时,应将 Commandtext属性设置为存储过程的名称。当调用 Execute方 法之一时,该命令将执行此存储过程 3. TableDirect:定义要使用表 CommandText!获取或设置对数据源执行的sQL语句或存储过程名或表名。 Command也称为查询字符串 Connection 获取或设置此 Command对象使用的 Connection对象的名称 CommandTimeOut获取或设置在终止对执行命令的尝试并生成错误之前的等待时间,即等待命令执行的时间(以秒为单位)
◼ 7.4.3 Command对象的属性和方法 ◼ 1.Command对象的属性 ◼ Command对象的常用属性及说明见表7-7
2. Command对象的方法 ■ Command对象的方法统称为 Execute方法,其常用方法及说 明见表7-8。 表78 Command对象的常用方法及说明 返回值 Eeao返回一个标量值,例如,需要返回 COUNT0、SUM0或AN0等聚合函数的结果 执行SQL语句并返回受影响的行数。用于执行不返回任何行的命令,如 INSERT、 UPDATE或 ExecuteNonQueryO DELETE ExecuteReadero 返回一个 DataReader对象 ExecuteXMLReader返回 XmlReader对象,只用于 Sqlcommand对象 ■对数据库的操作分为:查询操作和非查询操作 对于查询操作,又有两种情况:一是查询单个值,二是查 询若干条记录。要查询单个值,可使用 Command对象的 Executescalar0方法;要查询多条记录,可使用 Command对 象的 Execute reader0方法。 对数据库执行的非査询操作包括增加、修改、删除记录, 都使用 Command对象的 ExecuteNon Query0方法
◼ 2.Command对象的方法 ◼ Command对象的方法统称为Execute方法,其常用方法及说 明见表7-8。 ◼ 对数据库的操作分为:查询操作和非查询操作。 ◼ 对于查询操作,又有两种情况:一是查询单个值,二是查 询若干条记录。要查询单个值,可使用Command对象的 ExecuteScalar()方法;要查询多条记录,可使用Command对 象的ExecuteReader()方法。 ◼ 对数据库执行的非查询操作包括增加、修改、删除记录, 都使用Command对象的ExecuteNonQuery()方法
7.44增加、修改、删除记录操作 使用NE' T Framewo数据提供程序,可以通过执行数据定 义语句或存储过程来处理那些修改数据但不返回行的SQL 语句,例如,修改数据的SQⅠ语句( INSERT、 UPDATE 和DEⅠETE)、修改数据库或编录架构的语句(如 CREATE TABLE和 ALTER COLUMN)。这些命令不会像 查询一样返回行,因此C ommaney d对象提供了 ExecuteNon Query0方法来处理这些命令。 Command对象的 ExecuteNon Query方法的语法格式如下 命令对象名 ExecuteNon Queryo; 使用 ExecuteNonQuery0方法的步骤如下。 如果要执行对数据库中的数据进行修改的命令或存储过程 (如Ⅰ NSERT、 UPDATE或 DELETE),则需要使用相应 S①L命令和 Connectior对象创建一个 Command对象,包括 所有必需的 Parameters,然后使用 Command对象的 ExecuteNonQuery0方法来执行该命令
◼ 7.4.4 增加、修改、删除记录操作 ◼ 使用.NET Framework数据提供程序,可以通过执行数据定 义语句或存储过程来处理那些修改数据但不返回行的SQL 语句,例如,修改数据的SQL语句(INSERT、UPDATE 和DELETE)、修改数据库或编录架构的语句(如 CREATE TABLE和ALTER COLUMN)。这些命令不会像 查询一样返回行,因此Command对象提供了 ExecuteNonQuery()方法来处理这些命令。 ◼ Command对象的ExecuteNonQuery()方法的语法格式如下: ◼ 命令对象名.ExecuteNonQuery(); ◼ 使用ExecuteNonQuery()方法的步骤如下。 ◼ 如果要执行对数据库中的数据进行修改的命令或存储过程 (如INSERT、UPDATE或DELETE),则需要使用相应 SQL命令和Connection对象创建一个Command对象,包括 所有必需的Parameters,然后使用Command对象的 ExecuteNonQuery()方法来执行该命令
ExecuteNon Query0方法执行更新操作, ExecuteNon Query0 方法返回一个整数,表示受已执行的语句或存储过程影响 的行数。如果执行了多条语句,则返回的值为受所有已执 行语句影响的记录的总数。对于其他类型的语句,诸如 SET或 CREATE语句,则返回值为-1;如果发生回滚,则 返回值也为-1 以下代码示例执行一条 INSERT语句,然后使用 ExecuteNon Query方法将一条记录插入数据库中: conn. Open;//假设连接是一个有效的 ISqlConnection string sqlString="INSERT INTO UserInfo(UserName, UserPassword) values(john, 321cba,) Sqlcommand cmd new Sqlcommand(sqlstring, conn) Int32 records Affected= command. Execute Non Query0;//1] 方法并保存受影响的记录个数 更新数据源中数据的示例如下
◼ ExecuteNonQuery()方法执行更新操作,ExecuteNonQuery() 方法返回一个整数,表示受已执行的语句或存储过程影响 的行数。如果执行了多条语句,则返回的值为受所有已执 行语句影响的记录的总数。对于其他类型的语句,诸如 SET或CREATE语句,则返回值为−1;如果发生回滚,则 返回值也为−1。 ◼ 以下代码示例执行一条INSERT语句,然后使用 ExecuteNonQuery()方法将一条记录插入数据库中: ◼ conn.Open(); //假设连接是一个有效的SqlConnection ◼ string sqlString = "INSERT INTO UserInfo (UserName, UserPassword) Values('John', '321cba')"; ◼ SqlCommand cmd = new SqlCommand(sqlString, conn); ◼ Int32 recordsAffected = command.ExecuteNonQuery(); //执行 方法并保存受影响的记录个数 ◼ 更新数据源中数据的示例如下