to:Sandy945 sqldatareader 关闭问题!续……

v1srine 2011-12-20 08:22:45
由于匆忙结贴了!现在见到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获取用户信息的情况下!
*/
...全文
67 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
v1srine 2011-12-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sandy945 的回复:]
要看是否有并发,如果不考虑支持并发 那么可以是静态的

反之 则不可以
[/Quote]

谢谢!
阿非 2011-12-20
  • 打赏
  • 举报
回复
要看是否有并发,如果不考虑支持并发 那么可以是静态的

反之 则不可以
v1srine 2011-12-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sandy945 的回复:]
public static SqlDataReader ExecRead(string sql, params SqlParameter[] values)
{
SqlCommand cmd = new SqlCommand(sql, Sqlconn);
SqlDataReader sdr = null;
cmd.Parameters.AddRange(values);
……
[/Quote]

噢!谢谢!
sandy前辈,请问sqlconn是所有人共用一个!还是每个人访问都会new一个新的sqlconn呢?
v1srine 2011-12-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ajaxtop 的回复:]
如果我的网站上线的时候!
有很多人使用,那么登陆这个过程肯定是不断的!
那么这样问题就来了,有人在访问,有人在登陆,
那么登陆的时候使用了sqldatareader!这样就会导致有一瞬间是无法返回结果集的!


楼主说的上面这种现象是不存在的
[/Quote]

好吧!谢谢!
那。像sandy前辈说得那个“sqldatareader 是独占链接的,但它只是独占连接池中的一个链接,其他空闲链接还是可用的!”
为什么我的代码会出错呢!
能解答下吗?前辈
阿非 2011-12-20
  • 打赏
  • 举报
回复
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是静态的
ajaxtop 2011-12-20
  • 打赏
  • 举报
回复
如果我的网站上线的时候!
有很多人使用,那么登陆这个过程肯定是不断的!
那么这样问题就来了,有人在访问,有人在登陆,
那么登陆的时候使用了sqldatareader!这样就会导致有一瞬间是无法返回结果集的!


楼主说的上面这种现象是不存在的

62,046

社区成员

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

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

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

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