1、ExecuteReader通常用来执行一个查询操作,返回一个SqlDataReader对象或OleDbDataReader对象。当使用DataReader对象时,它被设计为一个只读、只进的数据流。这些数据流都是从数据库返回的。所以,每次的访问或操作只有一个记录保存在服务器的内存中。
DataReader具有较快的访问能力,并且使用较少的服务器资源。DataReader提供了“游标式”读取方法,当从结果中读取了一行,则“游标”会继续读取到下一行。通过Read方法可以一行一行读取数据,并且返回bool值,以判断从数据库中是否读取完数据。示例:
public static void ExecuteReader(string strCon) { SqlConnection con = new SqlConnection(strCon); string cmdText = "select top 5 * from stuInfo"; SqlCommand cmd = new SqlCommand(cmdText, con); con.Open(); SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection); Console.WriteLine("学号 姓名 专业"); while (dr.Read()) { Console.WriteLine("{0} {1} {2}", dr["stuid"], dr["name"], dr["dept"]); } dr.Close(); }
执行结果:
执行ExecuteReader方法时,通过CommandBehavior的枚举值CloseConnection可在关闭SqlDataReader对象时自动断开SqlConneciton连接。
2、ExecuteNonQuery通常对数据库中的数据进行增、删、改的操作,返回受影响的行数(为整型)。。在进行数据库事务处理时或不需要DataSet为数据库进行更新时,ExecuteNonQuery()方法是数据操作的首选。因为ExecuteNonQuery()支持多种数据库语句的执行。
注:当使用select查询时,返回值为-1;使用create table或drop table返回0。示例:
public static int ExecuteNonQuery(string strCon)
{
int result=0;
try
{ //使用useing语句来关闭连接和释放SqlCommand对象
using (SqlConnection con = new SqlConnection(strCon))
{
using (SqlCommand cmd = new SqlCommand())
{
cmd.CommandText = "insert into stuInfo values('20091005',N'刘欣',N'男',N'计算机科学与技 术','60701','1989/11/11','13987467828')";
cmd.Connection = con; con.Open(); result = cmd.ExecuteNonQuery();
Console.Write(result);
}
}
}
catch (SqlException ex)
{
Console.Write(ex.Errors);
}
return result;
}