数据库连接致命错误,不知道大家有没有遇到过这种情况

heku518 2010-07-13 04:34:09

public SqlConnection GetCon()
{
try
{
string configFile = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "参数配置.xml");
if (File.Exists(configFile))
{
XmlOperator xmlOperator = new XmlOperator(configFile);
int size = xmlOperator.GetXmlReader().Length;
string[] getDataBaseInfo = new string[size];

for (int i = 0; i < size; i++)
{
getDataBaseInfo[i] = xmlOperator.GetXmlReader()[i];
}
string G_Str_ConnectionString = "Server=" + getDataBaseInfo[0];
G_Str_ConnectionString += ";user id=" + getDataBaseInfo[1];
G_Str_ConnectionString += ";password=" + getDataBaseInfo[2];
G_Str_ConnectionString += ";initial catalog=" + getDataBaseInfo[3] + ";Connect Timeout=20";

G_Con = new SqlConnection(G_Str_ConnectionString);
G_Con.Open();
}
else
{
MessageBox.Show("不存在配置文件,请添加!");
Application.Exit();
}
}
catch (Exception ex)
{
MessageBox.Show("数据库打开失败,错误原因:" + ex.Message.ToString());
}
return G_Con;
}



/// <summary>
/// 执行SQL语句
/// </summary>
/// <param name="cmdtxt">要执行的SQL语句</param>
/// <returns></returns>
public bool GetExecute(string cmdtxt)
{
try
{
G_Com = new SqlCommand(cmdtxt, GetCon());

if (G_Com.ExecuteNonQuery() > 0)
{
int count = G_Com.ExecuteNonQuery();
MessageBox.Show(count.ToString());
return true;
}
else
return false;
}
catch (Exception ex)
{
MessageBox.Show("GetExecute函数错误:" + ex.Message.ToString());
return false;
}
finally
{
if (GetCon().State == ConnectionState.Open)
{
GetCon().Close();
G_Com.Dispose();
}
}
}

#endregion



#region 返回数据
/// <summary>
/// 返回数据集类型
/// </summary>
/// <param name="cmdtxt">需要查询的SQL语句</param>
/// <returns></returns>
public DataSet GetDs(string cmdtxt, string table)
{
try
{
G_Da = new SqlDataAdapter(cmdtxt, GetCon());
G_Ds = new DataSet();
G_Da.Fill(G_Ds, table);
return G_Ds;
}
catch (Exception ex)
{
MessageBox.Show("错误:" + ex.Message.ToString());
return null;
}
finally
{
if (GetCon().State == ConnectionState.Open)
{
GetCon().Close();
this.Dispose();
}
}
}




/// <summary>
/// 返回SqlDataReader类型数据
/// </summary>
/// <param name="cmdtxt">要执行的SQL语句</param>
/// <returns></returns>
public SqlDataReader GetReader(string cmdtxt)
{
G_Com = new SqlCommand(cmdtxt, GetCon()); //声明SqlCommand对象
SqlDataReader P_Dr;
try
{
P_Dr = G_Com.ExecuteReader(CommandBehavior.CloseConnection);
return P_Dr;
}
catch (Exception ex)
{
MessageBox.Show("错误:" + ex.Message.ToString());
return null;
}
}


每次调用GetExecute()这个函数
大概程序关闭 然后 启动一两次之后会提示,可是我的代码里面加了finally{}每次用完都有关闭啊 !
现在都不知道为什么会这样,难道我操作太频繁了,还没来得及关闭就又创建了一次????
高手们,帮一下忙。。如果你遇到过这种情况的话
GetExecute函数错误:ExecuteNonQuery要求已打开且可用连接。连接的当前状态为打开
还会提示:GetExecute函数错误:内部连接致命错误!
...全文
394 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
heku518 2010-07-13
  • 打赏
  • 举报
回复
我现在做极限测试,所以才有这样的问题!可能操作太快了。还没来得及关闭就又创建了。或者还没有来得及关闭就又访问了!
heku518 2010-07-13
  • 打赏
  • 举报
回复
还是不行!不过谢谢你~
永生天地 2010-07-13
  • 打赏
  • 举报
回复
不过按道理来讲c#有垃圾回收机制,对于没有引用的对象,可以自动回收的

不像c++,必须要写上,但最好还是保持良好的编程习惯
永生天地 2010-07-13
  • 打赏
  • 举报
回复
c#我也是初学,不知道对不对
永生天地 2010-07-13
  • 打赏
  • 举报
回复

public DataSet GetDs(string cmdtxt, string table)
{
try
{
SqlConnection conn = GetCon();
G_Da = new SqlDataAdapter(cmdtxt, conn);
G_Ds = new DataSet();
G_Da.Fill(G_Ds, table);
return G_Ds;
}
catch (Exception ex)
{
MessageBox.Show("错误:" + ex.Message.ToString());
return null;
}
finally
{
//释放资源
if (G_Da != null)
{
G_Da.Dispose();
}

if (conn.State == ConnectionState.Open)
{
conn.Close();
this.Dispose();
}
}
}
heku518 2010-07-13
  • 打赏
  • 举报
回复
那么有没有什么解决办法?
永生天地 2010-07-13
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 garnett_kg 的回复:]
引用 7 楼 heku518 的回复:

引用 3 楼 heku518 的回复:
或者请问该在什么地方释放比较合适?

C# code

finally
{
if (GetCon().State == ConnectionState.Open)
{
GetCon().Close();
……


就算是每Call一次我每一次到最后不是也GetCon().Close()了……
[/Quote]
这个应该正确了,

你的GetCon()可以创建了SqlConnection对象并返回了他的引用

而你在调用时没有得到他的引用,这样就不能显示去释放连接,只有等到程序关闭了
claro 2010-07-13
  • 打赏
  • 举报
回复
不懂

纯帮顶
heku518 2010-07-13
  • 打赏
  • 举报
回复
还是不行!还是提示那样的错误!
aimeili001 2010-07-13
  • 打赏
  • 举报
回复
PBS VPS枪文
之前使用的VPS很不稳定,正好也要到期了,于是我就对了几家的VPS,最终确定是PBS VPS ,套餐选了最廉价的Standard,不过我选到了最想要的机房:HK Mege,这是我目前为止,从HK到国外最快的VPS了。

配置:
硬盘:15G
内存:256M
IP : 1个 HK出口(可以提供电信/网通/国际出口)
Hot backup : 1
PBS VPS刚买的时候有点担心,因为一个月180块,如果买便宜的VPS,可以买好多个。在买之前我联系了他们试用了两天,打消了我的疑虑。我主要看中了有HK的出口,还有hot backup的功能,而且那里的NOC团队也给我了很大的帮助。在试用的两天,我装了几次系统和遇到了几个问题,他们的NOC团队总是能给我最好的解决。我让我HK和美国的朋友测试一下到我的网站速度,他们的感觉都是好快的。这点我是比较满意的。
有点不满意的是他们那里提供的VPS只有CentOS版的,我原本想要RHEL版的,不过他那里没有,不过都是相通的,就用了CentOS了。
好了,大家也可以去试试PBS VPS,有想了解的,可以站内发短信给我。
heku518 2010-07-13
  • 打赏
  • 举报
回复
不明白!
SqlConnection cn=GetCon();
G_Com = new SqlCommand(cmdtxt, cn);

G_Com = new SqlCommand(cmdtxt, GetCon();
不是一样的概念吗?
Garnett_KG 2010-07-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 heku518 的回复:]

引用 3 楼 heku518 的回复:
或者请问该在什么地方释放比较合适?

C# code

finally
{
if (GetCon().State == ConnectionState.Open)
{
GetCon().Close();
……


就算是每Call一次我每一次到最后不是也GetCon().Close()了吗?
[/Quote]

你关掉的是GetCon()返回的连接.前一次的你没有关闭啊。

修改后大概是这样子的,试试。

public bool GetExecute(string cmdtxt)
{
try
{
SqlConnection cn=GetCon();
G_Com = new SqlCommand(cmdtxt, cn);

if (G_Com.ExecuteNonQuery() > 0)
{
int count = G_Com.ExecuteNonQuery();
MessageBox.Show(count.ToString());
return true;
}
else
return false;
}
catch (Exception ex)
{
MessageBox.Show("GetExecute函数错误:" + ex.Message.ToString());
return false;
}
finally
{
if (cn.State == ConnectionState.Open)
{
cn.Close();
G_Com.Dispose();
}
}
}


SQL77 2010-07-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 heku518 的回复:]
请问有没有优良的 数据库操作类 代码?
我也清楚它确实是每call一次 GetCon()返回的就是一个新的连接
该如何解决啊!说出解决方法!!
[/Quote]
清楚了那肯定是没有释放掉呀,第一次CALL一个,第二个次又CALL一个,是不同的,释放了最后那一个?
heku518 2010-07-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 heku518 的回复:]
或者请问该在什么地方释放比较合适?

C# code

finally
{
if (GetCon().State == ConnectionState.Open)
{
GetCon().Close();
……
[/Quote]

就算是每Call一次我每一次到最后不是也GetCon().Close()了吗?
heku518 2010-07-13
  • 打赏
  • 举报
回复
请问有没有优良的 数据库操作类 代码?
我也清楚它确实是每call一次 GetCon()返回的就是一个新的连接
该如何解决啊!说出解决方法!!
Garnett_KG 2010-07-13
  • 打赏
  • 举报
回复


public bool GetExecute(string cmdtxt)
{
try
{
G_Com = new SqlCommand(cmdtxt, GetCon());

if (G_Com.ExecuteNonQuery() > 0)
{
int count = G_Com.ExecuteNonQuery();
MessageBox.Show(count.ToString());
return true;
}
else
return false;
}
catch (Exception ex)
{
MessageBox.Show("GetExecute函数错误:" + ex.Message.ToString());
return false;
}
finally
{
if (GetCon().State == ConnectionState.Open)
{
GetCon().Close();
G_Com.Dispose();
}
}
}


你每call一次 GetCon()返回的就是一个新的连接。

SQL77 2010-07-13
  • 打赏
  • 举报
回复
大概程序关闭 然后 启动一两次之后会提示,可是我的代码里面加了finally{}每次用完都有关闭啊 !
现在都不知道为什么会这样,难道我操作太频繁了,还没来得及关闭就又创建了一次????

可能,那还没释放你又连接上了
heku518 2010-07-13
  • 打赏
  • 举报
回复
或者请问该在什么地方释放比较合适?

finally
{
if (GetCon().State == ConnectionState.Open)
{
GetCon().Close();
G_Com.Dispose();
}
}


上面这一段代码难道没有释放吗?不理解啊 !!!该怎么做才能释放?
heku518 2010-07-13
  • 打赏
  • 举报
回复
楼上。请问该如何释放?
SQL77 2010-07-13
  • 打赏
  • 举报
回复

GetExecute函数错误:ExecuteNonQuery要求已打开且可用连接。连接的当前状态为打开
还会提示:GetExecute函数错误:内部连接致命错误!

肯定是没关闭呀,要释放连接
前言如释重负,好用的技术就应该越来越简单React Hooks 是 React 16.8 从提案转为正式加入的新特性。这个新特性是个非常棒的设计。 可以说对于React 技术栈的发展具分割线一样的意义。讲师在课程中提到:之前使用 React 作为主要的前端技术,开发一款网页游戏。在整个游戏的各个模块中,Redux ,mobx,以及蚂蚁金服的 ant-design,dva, umi 这些框架或者第三方库都有涉及使用。但是自从了解了Facebook官方提案的 Hooks 特性后,才真正觉得获得了前所未有的解脱。如果你有React开发经验,学习了解 Hooks 后,一定有一种如释重负的轻松感。React 带来了方便也带来了迷茫相信关心 React Hooks 这项新特性的童鞋,很多已经有了一定的 React 开发经验。那么你一定有所体验,React 给我们带来方便的同时,也的确和长久以来的前端开发模式有极大的不同。React 并不需要用继承,而是推荐用嵌套。React 有独特的 jsx 语法。大多数情况 jsx 都使得我们的代码更加简洁了。然而有些时候也给我们带来了一些困扰。 比如数据的传递,逻辑的复用。 react 是一种 mvvm 的设计模式,作为开发者一定要清楚,那些数据是业务数据,那些数据是UI数据。否则你的代码很有可能会陷入混乱局面。大型项目中模块化与功能解耦困难在公司项目中 App 稍大的时候,我们发现状态提升和只通过 props 进行数据传递。很多时候都很难实现我们的需求。这时无论我们是否清楚的了解,但是状态管理也就是 redux mobx 等,轻易地进入到了公司的项目中。我们经过初期的尝试发现状态管理,确实比用纯粹的 React 带来了数据传递上的方便,以及代码组织上的清晰。但前提是你看懂且理解了 redux 大神晦涩的官网文档。 本来 React 被设计用来组件化前端开发。但当我们初期使用状态管理,我们常常会过度的使用状态数据,业务逻辑和ui逻辑没有清楚的分离,最终你的应用代码结果可能是:除了少数几个组件是独立的解耦的,大多数组件都因为状态数据的共享而耦合在了一起,且他们也完全依赖状态管理框架。无法再轻松的转移复用。使用高阶组件,属性渲染,渲染回调等高级特性,确实可以帮我们解决模块或功能的解耦问题。但是这些方法,确实有点超出普通“猿类”的技能。且降低了代码的可读性,对于团队协作,这是很致命的问题。React Hooks 真正开启前端模块化的金钥匙对于以上问题,React Hooks 都有很好的解决方案,官方的设计动机就是解决这些曾经的繁琐,化繁为简。React Hooks 让我们在纯函数中就可以使用 React 的众多特性。而不必使用类。代码扁平,易读。解耦状态相关逻辑,UI逻辑和业务逻辑更好的分离。这些逻辑往往是纯函数,而以前很容易混合在类组件中。通过自定义 Hooks 我们可以把应用中“状态相关”逻辑解耦出来,独立编写到我们自己的hooks 中。从而更加易于复用和独立测试。

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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