rd.Close();//关闭DataReader对象
ExecuteReader()可以执行相应的SQL语句,例如插入,更新以及删除等,当需要执行插入,更新或删除时,可以使用ExecuteReader()进行数据操作,示例代码如下所示.
stringstr="server='(local)';database='mytable';uid='sa';pwd='sa'";SqlConnectioncon=newSqlConnection(str);con.Open();stringstrsql="insertintomynewsvalues('执行更新后的标题')";SqlCommandcmd=newSqlCommand(strsql,con);SqlDataReaderrd=cmd.ExecuteReader();while(rd.Read()){Response.Write(rd["title"].ToString()+"
");}rd.Close();Response.Redirect("ExecuteReader.aspx");//创建连接字串//创建连接对象//打开连接//创建执行SQL语句//创建Command对象//使用ExcuteReader()方法//读取数据库
//关闭DataReader对象
当执行了插入,删除等数据库操作时,ExecuteReader返回为空的DataReader对象.当使用Read方法遍历读取数据库时,并不会显示相应的数据信息,因为不是查询语句,则返回一个没有任何数据的System.Data.OleDb.OleDbDataReader类型的集(EOF),但是ExecuteReader方法可以执行SQL语句.如图9-1所示.
244
图9-1
ExecuteReader()执行查询和事务处理
使用ExecuteReader()操作数据库,通常情况下是使用ExecuteReader()进行数据库查询操作,使用ExecuteReader()查询数据库能够提升查询效率,而如果需要进行数据库事务处理的话,ExecuteReader()方法并不是理想的选择.
9.1.2
使用ExecuteNonQuery()操作数据库
使用ExecuteNonQuery()操作数据库时,ExecuteNonQuery()并不返回DataReader对象,返回的是一个整型的值,代表执行某个SQL语句后,在数据库中影响的行数,示例代码如下所示.
stringstr="server='(local)';database='mytable';uid='sa';pwd='sa'";SqlConnectioncon=newSqlConnection(str);con.Open();stringstrsql="selecttop5*frommynewsorderbyiddesc";SqlCommandcmd=newSqlCommand(strsql,con);Label1.Text="该操作影响了"+cmd.ExecuteNonQuery()+"行";//创建连接字串//创建连接对象//打开连接//使用ExecuteNonQuery//执行SQL语句并返回行
上述代码使用了SELECT语句,并执行语句,返回受影响的行数.运行后,发现返回的结果为-1,说明,当使用SELECT语句时,并没有对任何行有任何影响.ExecuteNonQuery()通常情况下为数据库事务处理的首选,当需要执行插入,删除,更新等操作时,首选ExecuteNonQuery().对于更新,插入和删除的SQL句,ExecuteNonQuery()方法的返回值为该命令所影响的行数.对于"CREATETABLE"和"DROPTABLE"语句,返回值为0,而对于所有其他类型的语句,返回值为-1.ExecuteNonQuery()操作数据时,可以不使用DataSet直接更改数据库中的数据,示例代码如下所示.
protectedvoidButton1_Click(objectsender,EventArgse){stringstr="server='(local)';database='mytable';uid='sa';pwd='sa'";SqlConnectioncon=newSqlConnection(str);con.Open();stringstrsql="deletefrommynewswhereid>4";SqlCommandcmd=newSqlCommand(strsql,con);Label1.Text="该操作影响了"+cmd.ExecuteNonQuery()+"行";}245
//创建连接字串//创建连接对象//打开连接//编写执行删除的SQL语句//创建Command对象//返回影响行数
运行上述代码后,会执行删除id号大于4的