ExecuteReader 要求已打开且可用的连接。连接的当前状态为已关闭。

stringsql="selectTypeNamefromRoomTypewhereTypeId='"+TypeId+"'";con.getCon().Open();Sq... string sql = "select TypeName from RoomType where TypeId='" + TypeId + "'";
con.getCon().Open();
SqlCommand scm = new SqlCommand(sql, con.getCon());
SqlDataReader sdr = scm.ExecuteReader();
string typename = string.Empty;
while (sdr.Read())
{
typename = (string)sdr["TypeName"];
}
return typename;
sdr.Close();
public class DBHelper
{
public SqlConnection getCon()
{
string connectionstring = "server=.;trusted_connection=true;database=HotelManage";
SqlConnection con = new SqlConnection(connectionstring);
return con;
}
}

上面是我的连接字符串,应该没有问题的
展开
 我来答
lcg1986
推荐于2017-09-12 · TA获得超过3374个赞
知道大有可为答主
回答量:1858
采纳率:90%
帮助的人:1616万
展开全部
很明显:
在getCon()这个函数中,有一行代码是:
SqlConnection con = new SqlConnection(connectionstring);
也就是说,每调用一个这个函数,都会产生一个新的SqlConnection对象.
所以你下面的代码:
con.getCon().Open();
SqlCommand scm = new SqlCommand(sql, con.getCon());
两次getCon()得到的是不同的连接,第一个连接Open了.但是和SqlCommand绑定的连接没有Open.
修改成:
SqlConnection conn = con.getCon();
conn.Open();
SqlCommand scm = new SqlCommand(sql, conn);
手机用户51596
2016-04-18 · TA获得超过161个赞
知道答主
回答量:104
采纳率:0%
帮助的人:113万
展开全部
哎。你的using语句怎么不写大括号呢,不写的话下面这句话 conn.Open();一旦执行完,using就会释放你的conn资源啊,当然会被关闭了。你在这句话下面打个断点,看看conn是不是为null。大括号从conn.open()开始,一直到sdr.Close();结束。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
机元思0hd923
2009-06-02 · TA获得超过860个赞
知道答主
回答量:255
采纳率:0%
帮助的人:415万
展开全部
return要放在close()后面,不然你都return了,怎么还会close呢;还有就是“con.getCon().Open();”也有问题,Open的应该是实例化对象,而不是你的连接字符串方法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
痞子玉米谷
2009-06-02
知道答主
回答量:14
采纳率:0%
帮助的人:0
展开全部
string conStr="";链接字符串
SqlConnection con=new SqlConnection(conStr);
con.open();
string sql = "select TypeName from RoomType where TypeId='" + TypeId + "'";
SqlCommand scm = new SqlCommand(sql,con);
这样是常规的写法,应该可以
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
羽颜德鸿云
2019-08-28 · TA获得超过3805个赞
知道大有可为答主
回答量:3067
采纳率:33%
帮助的人:409万
展开全部
我建议你代码这样读取:using
(SqlDataAdapter
adapter =
new
SqlDataAdapter(select
*
from
XXX"
,
new
SqlConnection("你的连接字符串")){
DataTable
dt
=
new
DataTable();
adapter.Fill(dt);} 因为直接使用SqlDataAdapter去填充数据DataTable,没有任何必要打开或者关闭Connection和使用DataReader.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式