关于DataReader和asp.net数据库连接
usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Data.SqlClie...
using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
using System.Data;
namespace fdfdfdsf
{
public static class DBHelp
{
private static SqlConnection conn;
private static SqlCommand scd;
private static SqlDataReader sdr;
public static SqlDataReader Sdr
{
get {
return Scd.ExecuteReader();
}
}
private static Work work;
public static Work Work
{
get { return DBHelp.work; }
set { DBHelp.work = value; }
}
private static string sql;
public static string Sql
{
get { return sql; }
set { sql = value; }
}
/// <summary>
///
/// 通过判断连接为后续的Scd加载初始化
/// </summary>
public static SqlCommand Scd
{
get
{
if (conn == null) //加装代码块(判断连接)
{
conn = new SqlConnection(string.Format("server={0};database={1};uid={2};pwd={3}", Work.Server, Work.Database, Work.Uid, Work.Pwd));
conn.Open();
}
else if (conn.State == System.Data.ConnectionState.Closed)
{
conn.Open();
}
else if (conn.State == System.Data.ConnectionState.Broken)
{
conn.Close();
conn.Open();
}
scd = new SqlCommand(sql, conn);
return scd;
}
}
public static void SetClose(int i)
{
if (i == 0)
{
conn.Close();
}
else if (i == 1)
{
Sdr.Close();
conn.Close();
}
}
public static Subject SS(string truesql)
{
Sql = truesql;
Subject sb = new Subject();
while (Sdr.Read())
{
sb.Id = Convert.ToInt32(Sdr["Id"]);
sb.Name = Sdr["Name"].ToString();
sb.Subject1 = Sdr["Subject"].ToString();
sb.Mark = Convert.ToInt32(Sdr["Mark"]);
}
//SetClose(1);
return sb;
}
}
}
运行到 get {
return Scd.ExecuteReader();
}
出错,错误提示
已有打开的与此命令相关联的DataReader,必须首先将他关闭
什么意思 ??谁知道的告诉我下 !!!!
老大们,看清楚,不是conn的关闭,是datareader的管理,
代码太长,看不懂就放到TXT上排好看啊
这代码多经典,不是逻辑差,是你们跟不上
哪行出错??。。我写了白写了,Scd.ExecuteReader();这行出错,看懂了没 ??
什么打开两个连接。。。真是乱谈琴,那是验证连接状态,再选择关闭或打开,摆脱,就没.net高手来帮帮我吗 ??
开了没关,开清楚了,只有一个方法访问,从新加载的时候只做一遍,我靠了,什么知识。。。
简单的代码可读性高,深点的代码就看不懂 ??
我知道了,一个DataReader需要一个专门的连接,我的代码的连接被两个DataReader对象共用了,所以出错了,再建立个连接就好了 展开
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
using System.Data;
namespace fdfdfdsf
{
public static class DBHelp
{
private static SqlConnection conn;
private static SqlCommand scd;
private static SqlDataReader sdr;
public static SqlDataReader Sdr
{
get {
return Scd.ExecuteReader();
}
}
private static Work work;
public static Work Work
{
get { return DBHelp.work; }
set { DBHelp.work = value; }
}
private static string sql;
public static string Sql
{
get { return sql; }
set { sql = value; }
}
/// <summary>
///
/// 通过判断连接为后续的Scd加载初始化
/// </summary>
public static SqlCommand Scd
{
get
{
if (conn == null) //加装代码块(判断连接)
{
conn = new SqlConnection(string.Format("server={0};database={1};uid={2};pwd={3}", Work.Server, Work.Database, Work.Uid, Work.Pwd));
conn.Open();
}
else if (conn.State == System.Data.ConnectionState.Closed)
{
conn.Open();
}
else if (conn.State == System.Data.ConnectionState.Broken)
{
conn.Close();
conn.Open();
}
scd = new SqlCommand(sql, conn);
return scd;
}
}
public static void SetClose(int i)
{
if (i == 0)
{
conn.Close();
}
else if (i == 1)
{
Sdr.Close();
conn.Close();
}
}
public static Subject SS(string truesql)
{
Sql = truesql;
Subject sb = new Subject();
while (Sdr.Read())
{
sb.Id = Convert.ToInt32(Sdr["Id"]);
sb.Name = Sdr["Name"].ToString();
sb.Subject1 = Sdr["Subject"].ToString();
sb.Mark = Convert.ToInt32(Sdr["Mark"]);
}
//SetClose(1);
return sb;
}
}
}
运行到 get {
return Scd.ExecuteReader();
}
出错,错误提示
已有打开的与此命令相关联的DataReader,必须首先将他关闭
什么意思 ??谁知道的告诉我下 !!!!
老大们,看清楚,不是conn的关闭,是datareader的管理,
代码太长,看不懂就放到TXT上排好看啊
这代码多经典,不是逻辑差,是你们跟不上
哪行出错??。。我写了白写了,Scd.ExecuteReader();这行出错,看懂了没 ??
什么打开两个连接。。。真是乱谈琴,那是验证连接状态,再选择关闭或打开,摆脱,就没.net高手来帮帮我吗 ??
开了没关,开清楚了,只有一个方法访问,从新加载的时候只做一遍,我靠了,什么知识。。。
简单的代码可读性高,深点的代码就看不懂 ??
我知道了,一个DataReader需要一个专门的连接,我的代码的连接被两个DataReader对象共用了,所以出错了,再建立个连接就好了 展开
4个回答
展开全部
就错误提示来看,是你打开一 个SQL连接没有关闭,说实话你这程序真是写得真乱,也懒看了,你自己加断电调试吧。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你要看你这个错误在哪行代码提示的,然后再检查看是不是前面有conn或是sdr没有关
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
自己检查逻辑。。肯定那里写错了。。开了没关。。又开
就报你这个错误了
就报你这个错误了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
数据库连接没有关闭,连续打开两个连接老兄,顺便说一下谁写的代码可读性太差了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询