ado.net中常用数据库操作方法:
(1)SqlDataReader(数据库只读操作)
提供一种从 SQL Server 数据库读取行的只进流的方式,它既然提供只读属性,那么显然当只需要执行读取操作的时候执行,在执行select语句的时候很有必要,
因为,就执行效率而言,DataReader的效率是最高的。但是,它存在的弊端是,当SqlDataReader没有关闭之前,数据库会一直保持open状态,所以在使用
SqlDataReader时,使用完毕应该马上调用close()方法,当然,另一方面,一个连接只能被一个sqldatareader使用,故此需要及早关闭。
SqlCommand cmd=new SqlCommand(sqlStr,conn); SqlDataReader reader=cmd.ExecuteReader(); //如果读到了数据,则调用Read()方法返回值为true if(reader.Read()) { //拿到所读到的数据的第一列 if(!reader.IsDBNull(0)) { //拿到第一列的值 string str=reader.GetString(0); ....... } if(!reader.IsDBNull(1)) { //拿到第二列的字节数据,并将所读到的图片数据输出 byte[] data=reader.GetSqlBytes[2]; Response.ContentType="image/gif"; Response.OutputStream.Write(data,0,data.Length); ....... } ...... reader.Close(); cmd=null; }
(2)SqlDataAdapter与DataSet
ado.net提供很多数据库操作方法,但基本可以分为两大类,一种是以SqlDataReader为主,一行一行的读取数据,另一种就是SqlDataAdapter结合DataSet使用的数据库操作方法
SqlDataReader是直接与数据库连接,使用完即可断开的,其效率较高。而SqlDataAdapter是把数据库中的数据缓存到内存中,以DataSet数据集的方式进行填充。效率较低
//sqlStr为连接查询字符串,conn为连接字符串 SqlDataAdapter sda=new SqlDataAdapter(sqlStr,conn); // 新建数据集 DataSet ds=new DataSet(); //填充数据集 //sda.Fill(ds,"user"); //用Fill方法填充DataSet,建立名为user表的映射 sda.Fill(ds); //另一种填充数据集方式 //DataTable dt=ds.Tables["user"]; //将数据表的数据复制到DataTable对象 DataTable dt=ds.Table[0]; //另一种方式复制到DataTable对象 DataRowCollection rows=dt.Rows; //获取数据行 if(rows.count>0) { ........ }
(3) SqlParameter
一般来说,当输入的sql语句比较复杂的时候,使用SqlParameter具有简单高效,一目了然的效果
string sqlStr="update Jscores set [email protected],[email protected] ,[email protected] ,[email protected] where [email protected] and [email protected] "; List<SqlParameter> list=new List<SqlParameter>(); //为sql语句中的每个变量进行赋值 list.Add(new SqlParameter("@intUsual", intUsual)); list.Add(new SqlParameter("@intFinal", intFinal)); list.Add(new SqlParameter("@intScore", intScore)); list.Add(new SqlParameter("@stuNo", stuNo)); list.Add(new SqlParameter("@num", num)); list.Add(new SqlParameter("@strMemo", strMemo)); // 将需要执行的命令传给SqlCommand SqlCommand cmd=new SqlCommand(sqlStr,conn); foreach(SqlParameter p in list) cmd.Parameters.Add(p) ; int ret=cmd.ExecuteNonQuery(); //当然上述过程可以合二为一 // SqlCommand cmd = new SqlCommand("update JScores set [email protected],[email protected] ,[email protected] ,[email protected] where [email protected] and [email protected] ", conn); // cmd.Parameters.AddWithValue("@intUsual", intUsual); // cmd.Parameters.AddWithValue("@intFinal", intFinal); // cmd.Parameters.AddWithValue("@intScore", intScore); // cmd.Parameters.AddWithValue("@stuNo", stuNo); // cmd.Parameters.AddWithValue("@num", num); // cmd.Parameters.AddWithValue("@strMemo", DBNull.Value); // int ret = cmd.ExecuteNonQuery();
时间: 2024-10-10 23:52:53