6.3Command与DataReader类
6.3.1查询数据库(Command类) 两种方式创建Command对象
(1)使用Command的构造函数,如:
SqlCommand cmd=new sqlcommand("select * from Student",conn);
其中conn为connection对象,在Web.config中创建。
(2)使用Connection的CreatCommand()方法,如:
sqlcommand cmd=conn.CreatCommnad(); cmd.CommandText="Select * from Customers";
创建了Command对象以后可以使用一系列的Execute方法来执行命令语句。根据返回值不同,细分为ExecuteReader(),ExecuteScalar(),及ExecuteNonQuery。
1.ExecuteReader()方法,用法如:
String strConn=ConfirguratManager.ConnectionString["connectionString"].ConnectionString;
sqlconnection conn=new sqlconnection(strConn);
conn.Open();
sqlCommand cmd=new sqlcommand("Select * from Student",conn); //执行ExecuteReader()方法 sqlDataReader dr=cmd.ExecuteReader(); //将DataReader对象绑定到DataGrid控件 dgCust.DataSource=dr; dgCust.DataBind();
conn.Close; //关闭连接
2.ExecuteScallar()方法,返回单个值。
String strConn=ConfirguratManager.ConnectionString["connectionString"].ConnectionString; sqlconnection conn=new sqlconnection(strConn); conn.Open();
String s="Select top 1 age from Student Where name=王丽";
sqlCommand cmd=new sqlCommand(s,conn);
String d=(string)cmd.ExecuteScalar();
Message.Text=d.ToSting();
conn.Close;
3.ExecuteNonQuery()方法,用法如删除数据,更新数据
String strConn=ConfirguratManager.ConnectionString["connectionString"].ConnectionString; sqlconnection conn=new sqlconnection(strConn);
conn.Open();
String d="delete * from Student Where name=王丽";
String s="Selet * from Student";
Sqlcommand cmd=new sqlCommand(d,conn);
cmd.ExecuteNonQuery();//执行SQl语句,删除姓名为王丽的同学,该操作不返回任何值。
SqlCommand cmd=new SqlCommand(s,conn);
cmd.ExecuteReader();
6.3.2读取数据库查询结果(DataReader对象)
用Connection对象和Command对象从数据库连接并交互后,有两种方法来访问获取的结果。 (1)使用DataReader对象,用来逐行从数据源中获取数据并处理;节省内存可提高应用程序性能。减轻服务器对内存的需求。 (2)使用DataSet对象,用来将数据存到内存中进行处理; DataReader对象的创建可以概括为 String strConn=ConfirguratManager.ConnectionString["connectionString"].ConnectionString; sqlconnection conn=new sqlconnection(strConn);
conn.Open();
sqlcommand s="Select * from Student";
sqlDataReader dr=s.ExecuteReader();
DataReader对象创建以后,程序员就可以使用其Read方法从查询结果中获得一个结果集,一个结果集对应一行数据。(1)另外Read方法还会返回一个bool值,返回True表示仍有记录未读取,返回false表示已经到结果集的最好一条数据。(2)读取记录后,接下来的任务变为获取每个记录的某个字段,程序员可以字段名或者字段的引用来获取此记录中的某些字段。但DataReader提供了一种更为高效的查询字段的方法-Get方法。如下:
第一步,打开到数据库的连接,略;
String s="select * from Student";
sqlCommand cmd=new SqlCommand(s,conn);
sqlDataReader dr=cmd.ExecuteReader(); //通过DataReader的Read方法一次读取sql记录。
while (dr.Read())
{ Message.Text=Message.Text+"|"+dr.GetString(0); }
conn.Close; //关闭连接
有些数据提供者允许一个查询声明中包含多个命令(如SQL语句的存储过程)。以便产生多个结果集,对于多个结果集,可以调用DataReader对象的NextResult方法来获得下一个结果集。如果该方法的返回值为false,则表明已经到达最后一个结果集。如:
第一步,打开到数据库的连接,略;
String s1=”Select * from Student”;
String s2=”Select * from Customs”;
Sqlcommand cmd=new sqlcommand(s1+s2,conn);
SqlDataReader dr=cmd.ExecuteReader();
Do
{
While(dr.read())
{
Object[] cols=new object[2];
Int n=dr.GetValue(cols);
Message.Text=Message.Text+”/”+dr[0].ToString();
}
Message.Text=Message.Text+”***”;
}
While (dr.nextResule());
dr.Close;
conn.Close;
程序允许结果为。第一个结果集***第二个结果集。