DataReader

问题描述

SqlConnectioncon1=newSqlConnection("server=.;database=jsj;uid=sa;pwd=;");con1.Open();intBookid=Convert.ToInt32(this.GVbook.Rows[e.NewSelectedIndex].Cells[0].Text);stringstr1="select*fromBookinfowhereAllbookid="+Bookid;SqlCommandcmd1=newSqlCommand(str1,con1);SqlDataReaderdr1=cmd1.ExecuteReader();if(dr1.Read()){Session["Allbookid"]=dr1["Allbookid"].ToString();Session["Title"]=dr1["Title"].ToString();Session["DBname"]=dr1["DBname"].ToString();}dr1.Close();con1.Close();SqlConnectioncon2=newSqlConnection("server=.;database=jsj;uid=sa;pwd=;");con2.Open();stringstr2="select*fromUpdateinfo";SqlCommandcmd2=newSqlCommand(str2,con2);SqlDataReaderdr2=cmd2.ExecuteReader();if(dr2.Read()){Session["Ordertime"]=dr2["Ordertime"].ToString();}dr2.Close();con2.Close();SqlConnectioncon3=newSqlConnection("server=.;database=jsj;uid=sa;pwd=;");con3.Open();stringtitle=Session["Title"].ToString();stringbookid=Session["Allbookid"].ToString();stringdbname=Session["DBname"].ToString();DateTimetoday=System.DateTime.Now.Date;intordertime=Convert.ToInt32(Session["Ordertime"]);DateTimeshborrow=today.AddDays(ordertime);//定义限借日期stringStrr="select*fromOrderswhereAllbookid="+Bookid;SqlCommandCmdd=newSqlCommand(Strr,con3);SqlDataReaderDrr=Cmdd.ExecuteReader();if(Drr.Read()) //判断预约表中是否有此记录,若无则插入{Session["Allbookid"]=Drr["Allbookid"].ToString();}else{stringstr4="insertintoOrders(Userid,Allbookid,Title,DBname,Ordertime,Shborrow,Isorder)values('"+Labuser.Text+"','"+bookid+"','"+title+"','"+dbname+"','"+today+"','"+shborrow+"','"+0+"')";SqlCommandcmd4=newSqlCommand(str4,con3);cmd4.ExecuteNonQuery();Session["Allbookid"]=Drr["Allbookid"].ToString();}Drr.Close();con3.Close();stringorderbookid=Session["Allbookid"].ToString();Labbookid.Text=orderbookid;Session["aa"]=Labbookid.Text.ToString();Response.Redirect("Orderbook.aspx");总是提示已有打开的与此命令相关联的DataReader,必须首先将它关闭请各位帮忙找一下原因谢谢!

解决方案

解决方案二:
-_-!好乱的代码。if(Drr.Read()) //判断预约表中是否有此记录,若无则插入{Session["Allbookid"]=Drr["Allbookid"].ToString();}else{stringstr4="insertintoOrders(Userid,Allbookid,Title,DBname,Ordertime,Shborrow,Isorder)values('"+Labuser.Text+"','"+bookid+"','"+title+"','"+dbname+"','"+today+"','"+shborrow+"','"+0+"')";SqlCommandcmd4=newSqlCommand(str4,con3);cmd4.ExecuteNonQuery();Session["Allbookid"]=Drr["Allbookid"].ToString();}

用DataReader的时候不能同时在别的地方写代码操作数据库SqlCommandcmd4=newSqlCommand(str4,con3);cmd4.ExecuteNonQuery();

解决方案三:
DataReader使用是独占一个数据库连接的,如果要在DataReader关闭前操作数据库,那就新创建一个SqlConnection
解决方案四:
呵呵见笑了以后多注意!
解决方案五:
你的代码风格太乱了..
解决方案六:
有必要连三次吗,好乱

时间: 2024-09-14 15:24:45

DataReader的相关文章

DataReader使用

  ADO.Net 有两种访问数据库源的方式,分别为Dagareader对象及DataSet 对象,就里说一下DataReader   DataReader对象是用来读取数据库的最简单方式,它只能读取,不能写入,并且是从头至尾往下读的,无法只读某条数据,但它占用内存小,速度快,有时需要用.   DataReader的创建         首行当然是打开数据库,然后建立Command对象,确认执行的SQL语句,最后用Commandname.ExecuteReader()方式返回一个DataRead

ADO.Net:从DataReader中获取数据表的Schema信息

ado|数据 使用DataReader的GetSchemaTable()方法可以获得数据表中包含的结构信息,此方法返回一个DataTable,DataTable中的每一行(Row)的ColumnName属性值即为数据表的一个字段名. SqlConnection coreDB=new SqlConnection(); coreDB.ConnectionString= "workstation id=\"GQA-ERIC-LV\";packet size=4096;integra

用DataReader还是DataSet?

我经常听到有人问这个问题:"在ASP.NET Web应用程序中我应该用DataReader类还是DataSet类呢?"在很多文章以及新闻组的贴子中我经常看到这样的误解,即认为DataReader(SqlDataReader或OleDbDataReader的缩写)比DataSet好.有时候我也会看到相反的说法.事实上,Microsoft创建了这两个数据存取类是因为它们都是我们所需要的.每个类都有其优点和不足,你可以根据应用环境来选择用哪一个. 本文就两者的选择问题做了很清楚的讲述,可以让

使用DataReader、DataSet、DataAdapter和DataView

使用DataReader.DataSet.DataAdapter和DataView ADO.NET提供两个对象用于检索关系型数据并把它存储在内存中,分别是DataSet和DataReader.DataSet提供内存中关系数据的表现--包括表和次序.约束等表间的关系的完整数据集合.DataReader提供快速.只向前.只读的来自数据库的数据流. 使用DataSet时,一般使用DataAdapter(也可能是CommandBuilder)与数据源交互,用DataView对DataSet中的数据进行排

ADO.NET详细研究(五)--DataReader终结篇

ado 这一次我们将把DataReader了结,同时我们提到的有些技巧与DataReader无关但是是很基本的也很有用的技巧.一,参数化查询在上一篇文章发表以后不少网友提意见说代码不规范,没有对sql使用参数,这确实是很大一个漏洞,所以我在这里首先谈一下参数化查询问题.使用参数化查询的好处:可以防止sql注入式攻击,提高程序执行效率.针对sql server .net data Provider,我们可以使用@作为前缀标记的参数.比如:const string connStr = "Data s

ado.net详细研究(二) —— DataReader(一)

ado 这次我们详细研究DataReader.我个人最喜欢的就是DataReader,虽然它不如DataSet强大,但是在很多情况下我们须要的是灵活的读取数据而不是大量的在内存里面缓存数据.比如在网络上每个用户都缓存大量的dataset,这很可能导致服务器内存不足.另外dataReader尤其适合读取大量的数据,因为它不在内存中缓存数据. 由于下面的讨论都设计到数据库操作,我们虚拟一个小项目:个人通讯录(单用户),这意味着我们须要一个contract的数据库,包含admin和fridend: a

ado.net详细研究(三) —— DataReader(二)

ado DataReader类 1. 创建DataReader对象 前面提到过没有构造函数创建DataReader对象.通常我们使用Command类的ExecuteRader方法来创建DataReader对象: SqlCommand cmd = new SqlCommand(commandText,ConnectionObject) SqlDataReader dr = cmd.ExecuteReader(); DataReader类最常见的用法就是检索Sql查询或者存储过程返回的记录.它是连接

ADO.NET详细研究(四)--实例演示DataReader基本操作

ado 前面的文章地址: http://dev.csdn.net/develop/article/26/26246.shtm http://dev.csdn.net/develop/article/26/26480.shtm http://dev.csdn.net/develop/article/26/26481.shtm 这次我们用实例演示DataReader的基本应用,当然同时包含Command以及Connection的基本操作.通过这个实例的学习我们能处理一般的数据库系统了. WinFor

asp.net中datareader对象的简单使用

asp.net|对象 DataReader对象作为一个asp.net中读取记录的一个比较好的控件,它的最大的优点就是速度快,使用频繁,而且在网站访问量很大的情况下,避免了因dataset对象过多的占用内存空间,造成服务器负担过重的情况.从而大大提高性能! 当然,它也有不好的地方,那就是datareader对象只能是根据read()方法判断,是一个只读的,仅向前的数据流.此外可以通过command对象的executereader来创建该对象. 下面是关于该控件的基本使用代码,希望对大家有用<%@

用DataReader分页与几种传统的分页方法的比较

对于数据库的分页,目前比较传统的方法是采用分页存储过程,其实用 DataReader 也可以实现分页 ,不需要写存储过程,实现效率上也比几种比较流行的分页方法要略快. 在开始这个方法之前,让我们先创建一个简单的测试环境: use Test GO if exists (select * from sysobjects where id = object_id('R_Student') and type = 'u') drop table R_Student GO create table R_St