selectwork_info.aspx.cs
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using UserFunctionClass;
using System.Configuration;namespace note
{
/// <summary>
/// selectwork_info 的摘要说明。
/// </summary>
public class selectwork_info : System.Web.UI.Page
{
protected System.Web.UI.HtmlControls.HtmlTable table1;
protected System.Web.UI.WebControls.DropDownList ddl1;
protected System.Web.UI.WebControls.Button submit;
protected System.Web.UI.WebControls.DataGrid DataGrid1;
protected System.Web.UI.WebControls.TextBox content;
protected System.Web.UI.WebControls.RegularExpressionValidator RegularExpressionValidator1;
SDataConn sm=new SDataConn(ConfigurationSettings.AppSettings["Main"]);
private void Page_Load(object sender, System.EventArgs e)
{
} #region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{    
this.submit.Click += new System.EventHandler(this.submit_Click);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion private void submit_Click(object sender, System.EventArgs e)
{

SqlDataReader dr;
// 定义一个work_convident,并把选择框中的值赋给它;
string work_convident;
work_convident=ddl1.SelectedItem.Text;
           //用Case 来判断 work_convident的值是“工单号”还是"发单期"?
switch (work_convident)
{
// 若work_convident的值是工单号,则执行按工单号(id)查询!
case "工单号":
             //int id;
//id=Convert.ToInt32(content.text);
dr=sm.SelectByKey("select * from worklist where id='"+content.Text+"'");
if(dr.Read())
{
DataGrid1.DataSource=sm.SelectByKey("select * from worklist where id='"+content.Text+"'");
DataGrid1.DataBind();
sm.Close();
}
else
{
Response.Write("没有这个序号的工单的信息!");
}
sm.Close();
break;
               // 若干 work_convident的值是“发单期”,则执行按发单期(SdList_Time)查询!
case "发单期":
dr=sm.SelectByKey("select * from worklist where (SdList_Time= CONVERT(DATETIME, 'content.text'))");
//使用CONVERT(DATETIME, 'content.text')函数将字符串转换为时间型!
if(dr.Read())//判断是否有此记录!
{
DataGrid1.DataSource=sm.SelectByKey("select * from worklist where  ((SdList_Time== CONVERT(DATETIME, 'content.text'))");
DataGrid1.DataBind();
sm.Close();
}
else
{
Response.Write("没有这时间的工单的信息!");
}
sm.Close();
break;
 // 若干 work_convident的值是“接单人”,则执行按接单人id(Accept_UserId)查询!
case "接单人":
// int userid;
// userid=Convert.ToInt32("content.text");
dr=sm.SelectByKey("select * from worklist where Accept_UserId='"+content.Text+"'");
if(dr.Read())
{
DataGrid1.DataSource=sm.SelectByKey("select * from worklist where Accept_UserId='"+content.Text+"'");
DataGrid1.DataBind();
sm.Close();
}
else
{
Response.Write("没有此人接的工单的信息!");
}
sm.Close();
break;
}
sm.Close();
}
}
}前后页面是selectwork_info.aspx
<%@ Page language="c#" Codebehind="selectwork_info.aspx.cs" AutoEventWireup="false" Inherits="note.selectwork_info" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>查询工作清单</title>
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<table id="table1" cellSpacing="0" cellPadding="0" width="600" align="center" border="0"
runat="server">
<tr>
<td width="106">按条件查询:</td>
<td width="130"><asp:dropdownlist id="ddl1" Width="112px" Runat="server">
<asp:ListItem Value="工单号">工单号</asp:ListItem>
<asp:ListItem Value="发单期">发单期</asp:ListItem>
<asp:ListItem Value="接单人">接单人</asp:ListItem>
</asp:dropdownlist></td>
<td width="54">内容:</td>
<td width="176"><asp:textbox id="content" Runat="server"></asp:textbox></td>
<td><asp:button id="submit" runat="server" BackColor="Lime" Text="GO"></asp:button></td>
</tr>
<tr>
<td colSpan="5"><asp:datagrid id="DataGrid1" runat="server" Width="617px" AutoGenerateColumns="False">
<Columns>
<asp:BoundColumn DataField="工单号"></asp:BoundColumn>
<asp:BoundColumn DataField="发单人ID"></asp:BoundColumn>
<asp:BoundColumn DataField="接单人ID"></asp:BoundColumn>
<asp:BoundColumn DataField="任务内容"></asp:BoundColumn>
<asp:BoundColumn DataField="任务下达时间"></asp:BoundColumn>
<asp:BoundColumn DataField="计划完时间"></asp:BoundColumn>
<asp:BoundColumn DataField="实际完成时间"></asp:BoundColumn>
<asp:BoundColumn DataField="工单状态"></asp:BoundColumn>
<asp:BoundColumn DataField="紧急程度"></asp:BoundColumn>
</Columns>
</asp:datagrid></td>
</tr>
</table>
</form>
</body>
</HTML>
我选“接单人”(内容是id)后,出错
出错页面为:
“/note”应用程序中的服务器错误。
--------------------------------------------------------------------------------连接已经打开(state=Open)。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.InvalidOperationException: 连接已经打开(state=Open)。源错误: 
行 60:  #region 打开关闭连接 Open(),Close()
行 61:  public void Open()
行 62:  {_SConn.Open();}
行 63: 
行 64:  public void Close()
 源文件: e:\myclass\sql数据库操作\sqldataconn.cs    行: 62 堆栈跟踪: 
[InvalidOperationException: 连接已经打开(state=Open)。]
   System.Data.SqlClient.SqlConnection.Open() +420
   UserFunctionClass.SDataConn.Open() in e:\myclass\sql数据库操作\sqldataconn.cs:62
   UserFunctionClass.SDataConn.SelectByKey(String sqlstr) in e:\myclass\sql数据库操作\sqldataconn.cs:210
   note.selectwork_info.submit_Click(Object sender, EventArgs e) in g:\selectwork_info.aspx.cs:105
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +108
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +57
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
   System.Web.UI.Page.ProcessRequestMain() +1277 
--------------------------------------------------------------------------------
版本信息: Microsoft .NET Framework 版本:1.1.4322.573; ASP.NET 版本:1.1.4322.573 
帮帮我这个新手啊!我很多张程序都是这样说“
连接已经打开(state=Open)…………。”真把我搞晕了

解决方案 »

  1.   

    DataGrid1.DataBind()代码中要关闭连结不能在连结Open得时候又open一次
      

  2.   

    是sqldataconn.cs中报错,怎么不把其代码贴出来?建议你检查一下open和close吧,记着用完就关闭,看看有没有没关闭的地方。
      

  3.   

    可是我上面代码中已经用sm.close()已经关了啊找不出了!
    还有sqldataconn.cs这个我用到其他查询的程序中是可以的啊
      

  4.   

    sqldataconn.cs文件中你已经执行了open操作,在这个页面再open一次当然出错
    写程序的时候记得开门后要随手把门关上
      

  5.   

    sqldataconn.cs文件中执行了open操作后未执行close操作
      

  6.   

    还有问一下选择框中的内容是用什么方法取得!
    例:dd1.SelectedItem.Text
    dd1指选择框的id
      

  7.   

    示例:listbox
    ListItem TheItem=dd1(你的选择框id).SelectedItem;
    获得文本:TheItem.Text
    获得值:TheItem.Value
      

  8.   

    对于dropdownlist控件获得选中项的文本:dd1.SelectedItem.Text
    获得值:dd1.SelectedItem.Value