由于匆忙结贴了!现在见到sandy前辈的回复!所以再开一贴,顺便贴上代码!上一贴地址:http://topic.csdn.net/u/20111220/17/631e106f-1399-4c63-874d-5a7b852f8070.html#replyachor
//这个是登陆代码
//getpost.cs
    public string Login_In(string UserName, string UserPass)
    {
        if (UserName.Length <= 0 || UserPass.Length <= 0)
        {
            return "Error";
        }        string sql = "select Userpass,Salt from Users where UserName=@UserName";
        SqlParameter[] sp = new SqlParameter[]{
            new SqlParameter("@UserName", UserName)
        };
        SqlDataReader sdr = DB.ExecRead(sql,sp);
        try
        {
            if (sdr.Read())
            {
                if (GetWay.MD5(GetWay.MD5(UserPass) + sdr["Salt"].ToString()) == sdr["UserPass"].ToString())
                {
                    return "OK";
                }
                else
                {
                    return "Error";
                }
            }
            else
            {
                return "Error";
            }
        }
        finally
        {
            sdr.Close(); //如果不立刻关闭连接池其他查询没有返回结果!,开始没有添加这句代码,任何查询在这刻开始没有返回结果!
//但是听了sandy说:sqldatareader 是独占链接的,但它只是独占连接池中的一个链接,其他空闲链接还是可用的!
//希望大家看看我的代码有什么问题没!
        }
    }//分割线--------------------------------------------------------//db.cs
//DB.execread
    public static SqlDataReader ExecRead(string sql, params SqlParameter[] values)
    {
        SqlCommand cmd = new SqlCommand(sql, Sqlconn);
        SqlDataReader sdr = null;
        cmd.Parameters.AddRange(values);
        sdr = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
        return sdr;
    }//分割线--------------------------------------------------------//页面加载有一段代码
        if (!IsPostBack)
        {
            DB.bing("Select * from Links", Repeater1);
        }
/* 我的导航采用了这样的方式加载
    <asp:Repeater ID="Repeater1" runat="server">
      <ItemTemplate>
        <li><a href="<%# Eval("Href")%>" target="_blank"><%# Eval("Title")%></a></li>      
      </ItemTemplate>
    </asp:Repeater>
*///--分割线----------------------db.cs
    public static void bing(string strsql, Repeater Repeater1)
    {
        DataTable dt = GetDataSet(strsql);
        if (dt.Rows.Count > 0)
        {
            Repeater1.DataSource = dt.DefaultView;
            Repeater1.DataBind();
        }
    }    public static DataTable GetDataSet(string safeSql)
    {
        DataSet ds = new DataSet();
        SqlCommand cmd = new SqlCommand(safeSql, Sqlconn);
        SqlDataAdapter da = null;
        da = new SqlDataAdapter(cmd);
        da.Fill(ds);
        return ds.Tables[0];
    }/*
所以每次我登陆之后,导航便显示不出来,登陆之前还是可以的!
后来我就添加了这句代码!才解决!
sdr.Close();
*/
/*
但是这里我有个顾虑!
如果我的网站上线的时候!
有很多人使用,那么登陆这个过程肯定是不断的!
那么这样问题就来了,有人在访问,有人在登陆,
那么登陆的时候使用了sqldatareader!这样就会导致有一瞬间是无法返回结果集的!
请问这个怎么解决呢!//在不改用其他sqldata获取用户信息的情况下!
*/

解决方案 »

  1.   

    如果我的网站上线的时候!
    有很多人使用,那么登陆这个过程肯定是不断的!
    那么这样问题就来了,有人在访问,有人在登陆,
    那么登陆的时候使用了sqldatareader!这样就会导致有一瞬间是无法返回结果集的!
    楼主说的上面这种现象是不存在的
      

  2.   

        public static SqlDataReader ExecRead(string sql, params SqlParameter[] values)
        {
            SqlCommand cmd = new SqlCommand(sql, Sqlconn);
            SqlDataReader sdr = null;
            cmd.Parameters.AddRange(values);
            sdr = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
            return sdr;
        }
    ----------------------
    问题的原因是你的Sqlconn是静态的
      

  3.   


    好吧!谢谢!
    那。像sandy前辈说得那个“sqldatareader 是独占链接的,但它只是独占连接池中的一个链接,其他空闲链接还是可用的!”
    为什么我的代码会出错呢!
    能解答下吗?前辈
      

  4.   


    噢!谢谢!
    sandy前辈,请问sqlconn是所有人共用一个!还是每个人访问都会new一个新的sqlconn呢?