请教关于sqlconnection实例化问题,请问哪种方式创建好一些。

willto126 2014-12-01 09:51:18
页面1如下:
public partial class xdes1 : System.Web.UI.Page
{
public static string sconfig = ConfigurationManager.ConnectionStrings["sanid"].ConnectionString;
public SqlConnection connn = new SqlConnection(sconfig);
protected void InitTree1()
{
connn.open();
SQLCOMMAND代码……
connn.close();
}
protected void InitTree2()
{
connn.open();
SQLCOMMAND代码……
connn.close();
}
protected void InitTree3()
{
connn.open();
SQLCOMMAND代码……
connn.close();
}
}

面页2如下:
public partial class xdes2 : System.Web.UI.Page
{
protected void InitTree1()
{
SqlConnection connn = new SqlConnection(sconfig)
connn.open();
SQLCOMMAND代码……
connn.close();
}
protected void InitTree2()
{
SqlConnection connn = new SqlConnection(sconfig)
connn.open();
SQLCOMMAND代码……
connn.close();
}
protected void InitTree3()
{
SqlConnection connn = new SqlConnection(sconfig)
connn.open();
SQLCOMMAND代码……
connn.close();
}
}
...全文
268 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
sp1234_maJia 2014-12-06
  • 打赏
  • 举报
回复
那么性能上的损失就是微乎其微的(几毫秒) --> 那么性能上的损失就是微乎其微的(零点零几毫秒) 你可以测试一下。
  • 打赏
  • 举报
回复
嗯,对于“页面2”,这其实是很普遍的一种写法。它的基础就是假设 InitTreeX 可以随时重新组合使用,各自独立。在逻辑上没有什么职责上的不单一、不一致问题。唯一的争议就是“性能”问题。而如果你知道它可以用到“连接池”,那么性能上的损失就是微乎其微的(几毫秒),用这点性能损失换来了稳定性、灵活性,所以经常也这样分开写 DbConnection 代码。
  • 打赏
  • 举报
回复
把conn作为一个“外部变量”,而你的各个 InitTreeX 方法又都自顾自地(有冲突地)去 Open、Close,这在逻辑上有点不妥。既然conn是参数,那么你的 InitTreeX 方法就不要再去负责 Open、Close 操作了。 把职责重新分配一下,是第一原则。
  • 打赏
  • 举报
回复
应该写
 
protected void InitTree()
{
   using(SqlConnection connn = new SqlConnection(sconfig))
   {
        conn.Open();
        InitTree1(conn);
        InitTree2(conn);
        InitTree3(conn);
   }
}

protected void InitTree1(....)
{
    ....
}
protected void InitTree2(....)
{
    ....
}
protected void InitTree3(....)
{
    ....
}
bidisty 2014-12-06
  • 打赏
  • 举报
回复
应该封装在一个实例类中,这样写下去很难维护代码。 sqlconnection实例化应该在实例类的new方法中完成。
willto126 2014-12-05
  • 打赏
  • 举报
回复
引用 5 楼 laiyongxin 的回复:
我是比较喜欢 第二种方法 SqlConnection 共用的话 不好控制 你同时调用InitTree2(),InitTree3()时 第一种写法就有可能出问题
有同感
於黾 2014-12-01
  • 打赏
  • 举报
回复
必然是封装到类里去 open和close在函数里操作 传入个sql语句就完了 每个页面都自己去调用数据库,累死了
by_封爱 2014-12-01
  • 打赏
  • 举报
回复
写个类..调用会累死? 你这样写每个页面都这样 才会真正的死人啊...
弘毅致远 2014-12-01
  • 打赏
  • 举报
回复
建议第一种,从代码复用角度第一种更简介,并且易于维护。不过稍微修改下

public partial class xdes1 : System.Web.UI.Page
{
    public static string sconfig = ConfigurationManager.ConnectionStrings["sanid"].ConnectionString;
    public SqlConnection connn = new SqlConnection(sconfig);
....
protected void InitTree2()
{
if(conn != null && conn.State != Connnect.State.Opened)
  connn.open();
SQLCOMMAND代码……
if(conn != null && conn.State != Connnect.State.Closed)
connn.close();
}
....
}
lyx266 2014-12-01
  • 打赏
  • 举报
回复
我是比较喜欢 第二种方法 SqlConnection 共用的话 不好控制 你同时调用InitTree2(),InitTree3()时 第一种写法就有可能出问题
willto126 2014-12-01
  • 打赏
  • 举报
回复
引用 2 楼 xiaozhihui5535 的回复:
用第一种吧,至少用起来方便 就算有改动也好维护
谢谢!
willto126 2014-12-01
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
简单来说没有什么区别,后者写起来比较麻烦。 事实上Connection反复开关不会影响性能,因为其实底层有连接池机制,FCL不会频繁关闭对数据库真正的连接。
谢谢!
_萧萧 2014-12-01
  • 打赏
  • 举报
回复
用第一种吧,至少用起来方便 就算有改动也好维护
threenewbee 2014-12-01
  • 打赏
  • 举报
回复
简单来说没有什么区别,后者写起来比较麻烦。 事实上Connection反复开关不会影响性能,因为其实底层有连接池机制,FCL不会频繁关闭对数据库真正的连接。
zhengmushang 2014-12-01
  • 打赏
  • 举报
回复
第一种好一点点。

62,243

社区成员

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

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

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

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