无效操作。连接被关闭。怎么解决啊

mextb1860 2007-05-13 12:26:56
我使用了SQLHelper.cs
出现了异常
但是也面正常没有错误
提示错误

ServerVersion = “conn.ServerVersion”引发了“System.InvalidOperationException”类型的异常

base {System.SystemException} = {"无效操作。连接被关闭。"}

无效操作。连接被关闭。

SqlConnection conn = new SqlConnection(connectionString);
这句就报错了。怎么解决啊。谢谢大家了
分全给了。大家帮帮忙
...全文
5250 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Snail_fate 2012-05-29
  • 打赏
  • 举报
回复
#2正解
lioiwowiqkd 2008-01-21
  • 打赏
  • 举报
回复
你之前已经把连接close()了,不打开怎么进行操作啊?
feifeiyaqi3 2007-05-13
  • 打赏
  • 举报
回复
我明白你用的是HELPER但加上TRY就行了。
mextb1860 2007-05-13
  • 打赏
  • 举报
回复
/// <summary>
/// 准备执行一个命令
/// </summary>
/// <param name="cmd">sql命令</param>
/// <param name="conn">Sql连接</param>
/// <param name="trans">Sql事务</param>
/// <param name="cmdType">命令类型例如 存储过程或者文本</param>
/// <param name="cmdText">命令文本,例如:Select * from Products</param>
/// <param name="cmdParms">执行命令的参数</param>
private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
{

if (conn.State != ConnectionState.Open)
conn.Open();

cmd.Connection = conn;
cmd.CommandText = cmdText;

if (trans != null)
cmd.Transaction = trans;

cmd.CommandType = cmdType;

if (cmdParms != null)
{
foreach (SqlParameter parm in cmdParms)
cmd.Parameters.Add(parm);
}
}

我使用的是微软的SQLHelper
suiqirui19872005 2007-05-13
  • 打赏
  • 举报
回复
StateClosedSystem.Data.ConnectionState

连接没有open().

在try中加入
if (SqlConnection1.State != ConnectionState.Open)
SqlConnection1.Open();

加上
finally
{
if (SqlConnection1.State != ConnectionState.Close)
{
SqlConnection1.Close();
}
}
feifeiyaqi 2007-05-13
  • 打赏
  • 举报
回复
up
feifeiyaqi3 2007-05-13
  • 打赏
  • 举报
回复
问题:DATALIST数据不能显示?
我的ASPX页面数据显示是用ASCX来作的。
A.ascx
<asp:DataList ID="taskList" runat="server" CellPadding="4" ForeColor="#333333" OnLoad="taskList_Load" >
<ItemTemplate>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td>任务Id<br /><a href='Item.aspx?taskId=<%#Eval("taskId") %>&cateId=<%#Eval("cateId") %>'><%#Eval("taskId") %></a></td><td>标题<br /><a href='Item.aspx?title=<%#Eval("title") %>'><%#Eval("title") %></a></td><td>种类<br /><%#Eval("category") %></td>
<td><font>人数<br /></font>'<%#Eval("userNum") %>'</td><td><font color="#cc3366">价格<br /></font>'<%#Eval("price") %>'</td><td><font color="#cc3366">开始时间<br /></font>'<%#Eval("startTime") %>'</td>
<td><font color="#cc3366">终止时间<br /></font>'<%#Eval("endTime") %>'</td></tr>
<tr><td></td></tr>
</table>
</ItemTemplate>
<FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
<SelectedItemStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />
<AlternatingItemStyle BackColor="White" />
<ItemStyle BackColor="#FFFBD6" ForeColor="#333333" />
<HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />

</asp:DataList>
A.ascx.cs
protected void taskList_Load(object sender, EventArgs e)
{
//get taskId
string taskKey = Request.QueryString["taskId"];
//bind data

Task task = new Task();
taskList.DataSource = task.GetTaskByCategory(taskKey);
taskList.DataBind();
this.CachePolicy.Dependency = DependencyFacade.GetTaskDependency();




}
数据访问层A.cs
public IList<TaskInfo> GetTaskByCategory(string category)
{

IList<TaskInfo> TaskByCate = new List<TaskInfo>();
SqlParameter para = new SqlParameter("@category", SqlDbType.NVarChar, 100);
para.Value = category;

using (SqlDataReader sdr = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, Sql_Select_Task_By_Cate, para))
{
while (sdr.Read())
{
TaskInfo taskByCate = new TaskInfo(sdr.GetInt32(0), sdr.GetInt32(1), sdr.GetInt32(2), sdr.GetString(3), sdr.GetString(4), sdr.GetString(5), sdr.GetString(6), sdr.GetString(7), sdr.GetDecimal(8), sdr.GetDateTime(9), sdr.GetDateTime(10));
TaskByCate.Add(taskByCate);

}
sdr.Close();

}

return TaskByCate;


}

--------------
private const string Sql_Select_Task_By_Cate = "select * from task where cateId=@category";
-------------
public static SqlCommand GetSqlCommand2(string Id)
{

SqlParameter para = new SqlParameter("@category",SqlDbType.NVarChar,100);
para.Value = Id;
//create and return SqlCommand object
SqlCommand cmd=new SqlCommand(Sql_Select_Task_By_Cate);
cmd.Parameters.Add(para);
return cmd;
}
中间逻辑层A.cs
public IList<TaskInfo> GetTaskByCategory(string category)
{

//return new if string is empty
if (string.IsNullOrEmpty(category))

return new List<TaskInfo>();


//run a search against the data store

return dal.GetTaskByCategory(category);



}

用到的数据库封装代码:
public static SqlDataReader ExecuteReader(string connectionString,CommandType cmdType,string cmdText,params SqlParameter[] commandParameters)
{
SqlCommand cmd = new SqlCommand();
SqlConnection conn = new SqlConnection(connectionString);
try
{
PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
SqlDataReader sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return sdr;

}

catch
{
conn.Close();
throw;
}


}
------------------

private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
{
//judge connection status for db
if (conn.State != ConnectionState.Open)
{
conn.Open();
cmd.Connection = conn;
cmd.CommandText = cmdText;
}

//judge transaction is be status
if (trans != null)
{
cmd.Transaction = trans;
}
//method to take command Type for SqlCommand
cmd.CommandType = cmdType;
//add parameters
if (cmdParms != null)
{
foreach (SqlParameter parm in cmdParms)
{
cmd.Parameters.Add(parm);
}
}
}
----------------AInfo.cs
public TaskInfo(int taskId,int cateId,int itemId,string userName,string context,string title,string category,string userNum,decimal price,DateTime startTime,DateTime endTime)
{
this.taskId = taskId;
this.cateId = cateId;
this.itemId = itemId;
this.userName = userName;
this.context = context;
this.title = title;
this.category = category;
this.userNum = userNum;
this.price = price;
this.startTime = startTime;
this.endTime = endTime;


}
请问上面的问题:数据不能显示原因??谢谢
mextb1860 2007-05-13
  • 打赏
  • 举报
回复
PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);

会执行上面的代码


mextb1860 2007-05-13
  • 打赏
  • 举报
回复
我在执行SqlHelper.ExecuteReader(SqlHelper.Con, CommandType.Text, SQL_SELECT_USER, loginParameter)的时候

public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
{
//创建一个SqlCommand对象
SqlCommand cmd = new SqlCommand();
//创建一个SqlConnection对象
SqlConnection conn = new SqlConnection(connectionString);

//在这里我们用一个try/catch结构执行sql文本命令/存储过程,因为如果这个方法产生一个异常我们要关闭连接,因为没有读取器存在,
//因此commandBehaviour.CloseConnection 就不会执行
try
{
//调用 PrepareCommand 方法,对 SqlCommand 对象设置参数
PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
//调用 SqlCommand 的 ExecuteReader 方法
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
//清除参数
cmd.Parameters.Clear();
return reader;
}
catch
{
//关闭连接,抛出异常
conn.Close();
throw;
}

}

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧