每个函数中都有conn.Open(),请问如何做到仅打开一次?

lihzsonny 2016-05-06 01:09:12
如下的两句话都会出现在每个函数中,请问如何做到在类开始时仅定义一次而能被各函数共享使用:

OleDbConnection con=DBConnection.getConn();
con.Open();//打开连接

以下是我写的烂码,注意上面的代码被频繁使用:

using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.OleDb;
//using System.Data.Sql;
using System.IO;//上传文件
using System.Text;//编码

namespace _tjhdtx
{
/// <summary>
/// DBS 的摘要说明
/// </summary>
public class DBS
{
public DBS()
{
//下载于51aspx.com
// TODO: 在此处添加构造函数逻辑
//下载于51aspx.com
}



// static OleDbConnection con=DBConnection.getConn();


public static int sqlEx(string cmdstr)
{
// SqlConnection con = GetCon();//连接数据库
OleDbConnection con=DBConnection.getConn();
con.Open();//打开连接
OleDbCommand cmd = new OleDbCommand(cmdstr, con);
int recordcount = (int)cmd.ExecuteScalar();
try
{

//cmd.ExecuteNonQuery();//执行SQL 语句并返回受影响的行数
return recordcount;//成功返回1
}
catch
{
return 0;//失败返回0
}
finally
{
con.Dispose();//释放连接对象资源
}
}

public static int sqlExadu(string cmdstr)
{
OleDbConnection con=DBConnection.getConn();
con.Open();
OleDbCommand cmd = new OleDbCommand(cmdstr, con);

try
{

cmd.ExecuteNonQuery();//执行SQL 语句并返回受影响的行数
return 1;//成功返回1
}
catch
{
return 0;//失败返回0
}
finally
{
con.Dispose();//释放连接对象资源
}
}

public static void sqlTableUpdate(string cmdstr)
{
OleDbConnection con=DBConnection.getConn();
con.Open();
OleDbCommand cmdUpdate = new OleDbCommand(cmdstr, con);
cmdUpdate.ExecuteNonQuery();
con.Close();
}

public static DataTable reDatatable(string cmdstr)
{
OleDbConnection con=DBConnection.getConn();
con.Open();
OleDbDataAdapter da = new OleDbDataAdapter(cmdstr, con);
DataSet ds = new DataSet();
da.Fill(ds);
return (ds.Tables[0]);
}

/// <summary>
/// 返回指定Sql语句的DataTable
/// </summary>
/// <param name="sqlstr">传入的Sql语句</param>
/// <returns>DataTable</returns>
public static DataTable dataTable(string sqlstr)
{
OleDbConnection con=DBConnection.getConn();
con.Open();
OleDbCommand comm = new OleDbCommand();

OleDbDataAdapter da = new OleDbDataAdapter();
DataTable datatable = new DataTable();
try
{
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
da.SelectCommand = comm;
da.Fill(datatable);
}
catch (Exception)
{
}
finally
{
//closeConnection();
}
return datatable;
}


public static DataTable reDtanp(string cmdstr, int mypageindex, int mypagesize)
{
// SqlConnection con = GetCon();
OleDbConnection con=DBConnection.getConn();
con.Open();
OleDbDataAdapter da = new OleDbDataAdapter(cmdstr, con);
DataSet ds = new DataSet();
da.Fill(ds, mypagesize * (mypageindex - 1), mypagesize, "table");//利用 table表中从第 10 行开始的 15 行数据来填充 DataSet。
return (ds.Tables["table"]);
}
...全文
216 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
圣殿骑士18 2016-05-06
  • 打赏
  • 举报
回复
用完不关,这个理念已经很老旧了。 现在的理念都是即用即关。这是为了适应web应用的需要。想象一下一万个终端开启了一万个连接,那数据库是受不了了。 当然如果你的系统只是局域网下的几十个终端连接的系统,可以保留长连接。
江南小鱼 2016-05-06
  • 打赏
  • 举报
回复
数据库连接资源是昂贵的,而且连接对象有超时时间的,一次打开随时使用,这个不现实。 避免每个函数都写相同的代码,可以使用匿名委托,函数进行统一提交(在统一提交函数里面定义连接对象并打开,同时也可以统一捕获异常)。
zbdzjx 2016-05-06
  • 打赏
  • 举报
回复
楼主说的,也就是所谓的“数据库“长连接”与“短连接” ”了,可以参考下面这个连接说的。 http://blog.csdn.net/china_skag/article/details/7465868 http://bbs.csdn.net/topics/391031196?page=1 至于代码的简化,可以看一下DBHelper的用法。
下雨天抽烟 2016-05-06
  • 打赏
  • 举报
回复
连接打开 用完必须关闭。在实际的使用中一般不会讲数据库的这个打开关闭直接写在业务逻辑层里面的,你可以自己封装一个数据库操作的类,用的时候直接将sql语句作为参数带入这个类的方法中就可以了。不用刻意的 去操作数据库连接开启关闭。另外这个工具类一般都是定义为静态的,不用实例化,引用了直接调用就可以。 还有就是如果你一直连接数据库,必然会导致数据库性能的降低,而且会造成死锁或者系统的崩溃,所以不要手动去控制关闭
全栈极简 2016-05-06
  • 打赏
  • 举报
回复
数据库连接的原则就是即用即关,而不是什么“一直开着”。 底层机制是数据库连接池,用完之后就即时释放,放回到数据库连接池中,供下次调用时使用。

62,046

社区成员

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

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

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

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