我这个连接数据库的类有问题,大家看一下?

gdoucwx 2008-07-10 02:37:35
下面这个类怎么写才好。
using System;
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.SqlClient;
/// <summary>
/// DataBase 的摘要说明
/// </summary>
public class DataBase
{
private static DataBase _instance;
private static SqlConnection con;

//私有化构造器
private DataBase()
{
}

//获取DataBase的实例
public static DataBase GetInstance()
{
if (_instance == null)
{
_instance = new DataBase();
}
return _instance;
}

//创建数据库连接,返回一个SqlConnection
public static SqlConnection ReturnConn()
{
if (con == null)
{
string strConn = ConfigurationManager.ConnectionStrings["GDOUSCIMISConn"].ConnectionString;
con = new SqlConnection(strConn);
}
if (con.State.Equals(ConnectionState.Closed))
{
con.Open();
}
return con;
}

//根据参数,调用重载方法,执行存储过程,返回一个SqlCommand
public static SqlCommand CreateCmd(string procName, SqlParameter[] prams)
{
SqlConnection Conn = ReturnConn();
SqlCommand Cmd = new SqlCommand();
Cmd.CommandType = CommandType.StoredProcedure;
Cmd.Connection = Conn;
Cmd.CommandText = procName;
if (prams != null)
{
foreach (SqlParameter parameter in prams)
{
if (parameter != null)
{
Cmd.Parameters.Add(parameter);
}
}
}
return Cmd;
}

就这一个类,整个网站就会用到同一个con连接,这样写就会提示sqlDataReader已关闭
如果我不加
 if (con == null)
那就会提示连接池超过了最大连接数这个问题。
因此连接数据库的类要怎么写才好呢?
...全文
145 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
glboy12 2008-07-10
  • 打赏
  • 举报
回复
try
{
SqlConnection Conn = ReturnConn();
SqlCommand Cmd = CreateCmd(procName, prams);
SqlDataAdapter Dtr = new SqlDataAdapter();
DataSet Ds = new DataSet();
Dtr.SelectCommand = Cmd;
Dtr.Fill(Ds);
DataTable Dt = Ds.Tables[0];
Conn.Close();
return Dt;
}
catch (Exception ex)
{
return null;
}
finally
{
Conn.Close();
}
hackztx 2008-07-10
  • 打赏
  • 举报
回复
public static sqlconnection getcon(0
{
return getcon(web.config.string);
}
public static sqlconnection getcon(string strsqlserverstring)
{
sqlconnection con=new sqlconnection(strsqlserverstring);
con.open();
return con;
}
快乐的毛毛虫 2008-07-10
  • 打赏
  • 举报
回复
既然是static sqlconnection的话,为什么不放到 构造函数里面去写呢。而且你要注意建立连接的时候,不要打开连接。什么时候用,就打开,用完了关闭。
viena 2008-07-10
  • 打赏
  • 举报
回复
晕,重复帖
另一帖中已回复~
gdoucwx 2008-07-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 shoushii 的回复:]
private static SqlConnection con;
兄弟,这个根本就不能这么实现。
这个连接在并发情况下必须出错。
在静态方法中创建新的连接
应该
[/Quote]

这们兄弟,你指的在静态方法中创建新的连接是怎样的呢,可否发一段代码来看看,谢了。
gdoucwx 2008-07-10
  • 打赏
  • 举报
回复
using System;
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.SqlClient;
/// <summary>
/// DataBase 的摘要说明
/// </summary>
public class DataBase
{
private static DataBase _instance;

//私有化构造器
private DataBase()
{
}

//获取DataBase的实例
public static DataBase GetInstance()
{
if (_instance == null)
{
_instance = new DataBase();
}
return _instance;
}

//创建数据库连接,返回一个SqlConnection
public static SqlConnection ReturnConn()
{
string strConn = ConfigurationManager.ConnectionStrings["GDOUSCIMISConn"].ConnectionString;
SqlConnection Conn = new SqlConnection(strConn);
if (Conn.State.Equals(ConnectionState.Closed))
{
Conn.Open();
}
return Conn;
}

//根据参数,调用重载方法,执行存储过程,返回一个SqlCommand
public static SqlCommand CreateCmd(string procName, SqlParameter[] prams)
{
SqlConnection Conn = ReturnConn();
SqlCommand Cmd = new SqlCommand();
Cmd.CommandType = CommandType.StoredProcedure;
Cmd.Connection = Conn;
Cmd.CommandText = procName;
if (prams != null)
{
foreach (SqlParameter parameter in prams)
{
if (parameter != null)
{
Cmd.Parameters.Add(parameter);
}
}
}
return Cmd;
}
//根据参数调用重载方法,执行存储过程返回DataTable
public static DataTable RunProcGetTable(string procName, SqlParameter[] prams)
{
SqlConnection Conn = ReturnConn();
SqlCommand Cmd = CreateCmd(procName, prams);
SqlDataAdapter Dtr = new SqlDataAdapter();
DataSet Ds = new DataSet();
Dtr.SelectCommand = Cmd;
Dtr.Fill(Ds);
DataTable Dt = Ds.Tables[0];
Conn.Close();
return Dt;
}

原来我是这样写的,这样的话多人一起访问的时候,就会出现
"异常详细信息: System.InvalidOperationException: 超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。"
在web.config里我已经设置了如下:
<connectionStrings>
<add name="GDOUSCIMISConn" connectionString="Data Source=K513CSERVER;Initial Catalog=GDOUSCIMIS;User ID=sa;Password=123456;Max Pool Size = 300;" providerName="System.Data.SqlClient"/>
</connectionStrings>

请问如何解决?
zhangzwa 2008-07-10
  • 打赏
  • 举报
回复
如提示sqldatareader关闭说明连接已经断掉了。

sqldatareader在连接断掉的时候会自动关闭。

建议尽量少使用 datareader,因为一个datareader就会占用一个连接,datareader多了就会有很多个连接,所以如果断开连接datareader就关闭,不断开就超过连接数。

建议使用DATASET,而且连接完成后即时断开连接,DATASET 可以在连接断开之后独立存在与暂存区,不依赖连接。
shoushii 2008-07-10
  • 打赏
  • 举报
回复
private static SqlConnection con;
兄弟,这个根本就不能这么实现。
这个连接在并发情况下必须出错。

应该在静态方法中创建新的连接
dotnet东哥 2008-07-10
  • 打赏
  • 举报
回复
方式一using(...conn..){}
方式二及时close()dispose()
gdoucwx 2008-07-10
  • 打赏
  • 举报
回复
我在后面的每个方法里都把它给close()了,但是问题还在呀
  public static DataTable RunProcGetTable(string procName, SqlParameter[] prams)
{
SqlConnection Conn = ReturnConn();
SqlCommand Cmd = CreateCmd(procName, prams);
SqlDataAdapter Dtr = new SqlDataAdapter();
DataSet Ds = new DataSet();
Dtr.SelectCommand = Cmd;
Dtr.Fill(Ds);
DataTable Dt = Ds.Tables[0];
Conn.Close();
return Dt;
}
zhangzwa 2008-07-10
  • 打赏
  • 举报
回复
提示一下,系统报什么错?
JustLovePro 2008-07-10
  • 打赏
  • 举报
回复
每个方法体里,凡是用到con.open()的,用完了立即con.close();
而后再用到的时候,在打开---记得及时关闭~
内容概要:本文围绕“面向高精度电流控制的PMSM多参数PSO辨识模型研究”,系统阐述了基于Simulink的永磁同步电机(PMSM)多参数辨识方法,重点采用粒子群优化算法(PSO)实现对电机关键内部参数的高精度辨识。研究构建了完整的PMSM控制系统仿真模型,结合智能优化算法,解决了传统参数辨识中精度低、收敛慢的问题,有效提升了电流环控制的动态性能与稳态精度。该方法特别适用于对控制精度和响应速度要求较高的工业应用场景,如高性能伺服系统、电动汽车驱动系统等,具有较强的工程实用价值和科研参考意义。文中提供了完整的Simulink仿真模型与配套代码,确保了研究内容的可复现性和实践操作性。; 适合人群:具备电机控制、自动化或电气工程等相关专业背景,熟悉MATLAB/Simulink仿真环境,从事电机驱动系统研发、控制算法设计或相关领域科研工作的工程师及研究生,尤其适合工作1-5年、希望深入理解先进参数辨识技术的研发人员。; 使用场景及目标:①开展高精度PMSM控制系统的设计与参数辨识研究;②学习并掌握PSO等智能优化算法在电机系统参数辨识中的具体实现与调优技巧;③完成学术论文复现、科研项目验证、毕业设计或工程原型开发,提升对现代电机控制核心技术的理解与应用能力。; 阅读建议:建议读者结合提供的Simulink模型与源代码进行动手实践,按照文档逻辑逐步搭建与调试仿真系统,重点关注PSO算法与电机模型的交互机制、目标函数设计及参数收敛过程,通过对比不同工况下的辨识结果,深入理解算法性能与控制精度之间的内在联系。

62,271

社区成员

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

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

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

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