太无语!!自己尝试些数据库操作层错误百出,请高人指点,数据库连接到底怎样算释放

周睿 2010-04-01 10:55:34

private static SqlConnection connection;
public static SqlConnection Connection
{
get
{
string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
if (connection == null)
{
connection = new SqlConnection(connectionString);
connection.Open();
}
else if (connection.State == System.Data.ConnectionState.Closed)
{
connection.Open();
}
else if (connection.State == System.Data.ConnectionState.Broken)
{
connection.Close();
connection.Open();
}
return connection;
}
}


public DataTable GetDataTable(string commandText)
{
try
{
using (SqlDataAdapter da = new SqlDataAdapter(commandText,Connection))
{
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}
}
catch (Exception ex)
{
string tsql = "";
if (bShowSql)
tsql = commandText;
throw new Exception(tsql + " " + ex.Message);
}
}

数据库关闭后,再打开,第一运行总会报
在向服务器发送请求时发生传输级错误。 (provider: 共享内存提供程序, error: 1 - 执行读/写操作期间检测到 I/O 错误。)
频繁刷新后又会出现,连接未关闭,
        public Object ExecuteScalar(string commandText)
{
try
{
using (SqlCommand comm = new SqlCommand(commandText,Connection))
{
return comm.ExecuteScalar();
}
}
catch (Exception ex)
{
string tsql = "";
if (bShowSql)
tsql = commandText;
throw new Exception(tsql + " " + ex.Message);
}
}

可能是这句话没处理好的问题,
...全文
417 70 打赏 收藏 转发到动态 举报
写回复
用AI写文章
70 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunnj87 2010-04-02
  • 打赏
  • 举报
回复
[Quote=引用 55 楼 doulestring 的回复:]
没用,问题依然存在,这个是不是我的问题?还是MSSQL2000的问题,因为这个问题只会在我重启数据库服务器后,第一次运行出现,
[/Quote]
我怎么感觉2005好像也有这问题
sql服务重启完,第一次链接出错,过会刷新就好了
我好想也遇到过,不过没注意过!
之后的访问不会出什么问题!
asdfa23rdadsdfa 2010-04-02
  • 打赏
  • 举报
回复
USING
jiaotashidi1988 2010-04-02
  • 打赏
  • 举报
回复
爱的发声的法师打法
周睿 2010-04-02
  • 打赏
  • 举报
回复
[Quote=引用 57 楼 a820815 的回复:]
你手动关闭一下
try
{

}
catch (Exception)
{

throw;
}
finally
{
con.Close();//无论前面如何执行,都会执行 finally 里面的代码
}
[/Quote]

连接我断定调试了,已经关闭了
周睿 2010-04-02
  • 打赏
  • 举报
回复
[Quote=引用 58 楼 telankes2000 的回复:]
取消static 即可
[/Quote]
我可以这么说,大多数人,包括我自己,对静态之间互相引用是否会有问题,一概不知,仅仅凭感觉
telankes2000 2010-04-02
  • 打赏
  • 举报
回复
取消static 即可
一叶障目 2010-04-02
  • 打赏
  • 举报
回复
你手动关闭一下
try
{

}
catch (Exception)
{

throw;
}
finally
{
con.Close();//无论前面如何执行,都会执行 finally 里面的代码
}
周睿 2010-04-02
  • 打赏
  • 举报
回复
http://social.microsoft.com/Forums/cs-CZ/sqlserverzhchs/thread/7819ff83-999f-4abb-9cda-b7aad5f63f88
可以看此贴,不是连接没及时关闭的
周睿 2010-04-02
  • 打赏
  • 举报
回复
没用,问题依然存在,这个是不是我的问题?还是MSSQL2000的问题,因为这个问题只会在我重启数据库服务器后,第一次运行出现,
liuyileneal 2010-04-02
  • 打赏
  • 举报
回复
楼主你再Fill函数之前加上
string s = conn.State.ToString();
断点调试看看conn的状态。。。
liyoubaidu 2010-04-02
  • 打赏
  • 举报
回复
一个链接未关闭引起的血案
yangyalin001 2010-04-02
  • 打赏
  • 举报
回复
public static SqlConnection Con
{
get
{
if (con == null || con.State == ConnectionState.Closed)
{
con = new SqlConnection("server=.;database=master;uid=sa;pwd=sa");//"Data Source=.;Initial Catalog=D1621;Persist Security Info=True;User ID=sa;Password=sa");
con.Open();
}
if (con.State == ConnectionState.Open)
{
con.Close();
}
return db.con;
}
set { db.con = value; }
}
周睿 2010-04-02
  • 打赏
  • 举报
回复
这个我自己本身,不太喜欢用什么挂架,除非自己的写的,
用别人感觉不太踏实,我只想找出这个程序中的错误而已
bluedoctor 2010-04-02
  • 打赏
  • 举报
回复
楼主不应该在public static SqlConnection Connection 里面打开链接,应该使用显式的方法打开和关闭连接,上面这个属性仅仅返回一个连接对象即可。建议在你的查询方法里面打开连接,用完了立即关闭。

像这样的数据操作底层问题,还是用一些框架来完成的好。
推荐一个框架PDF.NET,你只需要写SQL,DAL层的代码根本就不用你写,不用再操心数据库操作的问题,地址:
http://www.pwmis.com/sqlmap/
周睿 2010-04-02
  • 打赏
  • 举报
回复
连接都关闭了
zlqyizhizailushang 2010-04-02
  • 打赏
  • 举报
回复
连接是不是关闭 有问题?
周睿 2010-04-02
  • 打赏
  • 举报
回复
[Quote=引用 69 楼 tongjingjingisfly 的回复:]
public DataTable GetDataTable(string commandText)
{
try
{
using (SqlDataAdapter da = new SqlDataAdapter(commandText,Connection))//这里不对吧,你试试把参数该为command如何
{
DataTable dt = new DataTab……
[/Quote]
如果不对的话,根本就不能运行,而且它有这个重载
tongjingjingisfly 2010-04-02
  • 打赏
  • 举报
回复
public DataTable GetDataTable(string commandText)
{
try
{
using (SqlDataAdapter da = new SqlDataAdapter(commandText,Connection))//这里不对吧,你试试把参数该为command如何
{
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}
}
catch (Exception ex)
{
string tsql = "";
if (bShowSql)
tsql = commandText;
throw new Exception(tsql + " " + ex.Message);
}
}

周睿 2010-04-02
  • 打赏
  • 举报
回复
后来代码都显示调用了关闭,但错误依旧
周睿 2010-04-02
  • 打赏
  • 举报
回复

using (SqlCommand comm = new SqlCommand(commandText,Connection))
{
object ob = comm.ExecuteScalar();
connection.Close();
return ob;
}

后来我改了的
加载更多回复(50)

62,052

社区成员

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

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

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

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