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;
}
}
上面是我的连接字符串,应该没有问题的 展开
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;
}
}
上面是我的连接字符串,应该没有问题的 展开
8个回答
展开全部
很明显:
在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);
在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);
展开全部
哎。你的using语句怎么不写大括号呢,不写的话下面这句话 conn.Open();一旦执行完,using就会释放你的conn资源啊,当然会被关闭了。你在这句话下面打个断点,看看conn是不是为null。大括号从conn.open()开始,一直到sdr.Close();结束。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
return要放在close()后面,不然你都return了,怎么还会close呢;还有就是“con.getCon().Open();”也有问题,Open的应该是实例化对象,而不是你的连接字符串方法
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
string conStr="";链接字符串
SqlConnection con=new SqlConnection(conStr);
con.open();
string sql = "select TypeName from RoomType where TypeId='" + TypeId + "'";
SqlCommand scm = new SqlCommand(sql,con);
这样是常规的写法,应该可以
SqlConnection con=new SqlConnection(conStr);
con.open();
string sql = "select TypeName from RoomType where TypeId='" + TypeId + "'";
SqlCommand scm = new SqlCommand(sql,con);
这样是常规的写法,应该可以
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我建议你代码这样读取:using
(SqlDataAdapter
adapter =
new
SqlDataAdapter(select
*
from
XXX"
,
new
SqlConnection("你的连接字符串")){
DataTable
dt
=
new
DataTable();
adapter.Fill(dt);} 因为直接使用SqlDataAdapter去填充数据DataTable,没有任何必要打开或者关闭Connection和使用DataReader.
(SqlDataAdapter
adapter =
new
SqlDataAdapter(select
*
from
XXX"
,
new
SqlConnection("你的连接字符串")){
DataTable
dt
=
new
DataTable();
adapter.Fill(dt);} 因为直接使用SqlDataAdapter去填充数据DataTable,没有任何必要打开或者关闭Connection和使用DataReader.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询