这个SQL连接会被关闭吗?

wc0730 2010-01-06 05:02:37
读取SQL RS

public static SqlDataReader getrs(String sql)
{
SqlConnection con = greatcon();//获取连接。详细就不写了
con.Open();
SqlCommand exec = new SqlCommand(sql, con);
SqlDataReader rs = exec.ExecuteReader(CommandBehavior.CloseConnection);//听说这样可以直接关闭CON
return rs;
}

实际使用中。

String sql="select * from table1"
SqlDataReader rs = getrs(sql) //调用上面的方法
rs.Read();
XXXXXXXXX

rs.Close();
rs.Dispo……
//这样调用SQL。Con都被关闭了吗?



这样调用SQL。Con都被关闭了吗?
如果没有被关干净,要怎么做才能关闭干净?
...全文
145 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
vip__888 2010-01-06
  • 打赏
  • 举报
回复
判断一下
if(conn.Station=="Open")
{}
wc0730 2010-01-06
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 yan267 的回复:]
引用 16 楼 wc0730 的回复:
是不是有一个类方法直接调用好CON 打开,返回RS后,在应用页面中关闭CON的方法?



你看下SQLHelper.cs,它是写好的,运行完会自动关闭连接。
[/Quote]

看来简简单单的行不通了,一定要去搞SQL了…………
我本来想是不是简简单单就搞定,反正就是返一个RS出来……不用太麻烦……
yan267 2010-01-06
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 yan267 的回复:]
引用 16 楼 wc0730 的回复:
是不是有一个类方法直接调用好CON 打开,返回RS后,在应用页面中关闭CON的方法?



你看下SQLHelper.cs,它是写好的,运行完会自动关闭连接。
[/Quote]

记错了,都是要写conn.close()关闭的
yan267 2010-01-06
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 wc0730 的回复:]
是不是有一个类方法直接调用好CON 打开,返回RS后,在应用页面中关闭CON的方法?
[/Quote]


你看下SQLHelper.cs,它是写好的,运行完会自动关闭连接。
wc0730 2010-01-06
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 a6711145 的回复:]
引用楼主 wc0730 的回复:
读取SQL RS
C# codepublicstatic SqlDataReader getrs(String sql)
{
SqlConnection con= greatcon();//获取连接。详细就不写了
con.Open();
SqlCommand exec=new SqlCommand(sql, con);
SqlDataReader rs= exec.ExecuteReader(CommandBehavior.CloseConnection);//听说这样可以直接关闭CONreturn rs;
}
实际使用中。

....

这样调用SQL。Con都被关闭了吗?
如果没有被关干净,要怎么做才能关闭干净?


这样写 cn 不会被关闭的。需要自己 去cn.close()。
建议 LZ 这样写:
方法:
public static SqlDataReader getrs(SqlConnection cn,String sql)
{ ... }

调用:
using(SqlConnection cn=new SqlConnection( ...))
{
cn.open();
....
getrs(cn,strSql);
}

这样写 cn 会 自动关闭的。


[/Quote]

这样写的话无非就是多写个CON.CLOSE()和少写个COLOSE()的区别……

我就是希望把CON和RS放在一起……可以不用在页面中特意去写OPEN和CLOSE了……
如果写OPEN了,那么写个CLOSE也不是问题了……
a6711145 2010-01-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 wc0730 的回复:]
读取SQL RS
C# codepublicstatic SqlDataReader getrs(String sql)
{
SqlConnection con= greatcon();//获取连接。详细就不写了
con.Open();
SqlCommand exec=new SqlCommand(sql, con);
SqlDataReader rs= exec.ExecuteReader(CommandBehavior.CloseConnection);//听说这样可以直接关闭CONreturn rs;
}
实际使用中。

....

这样调用SQL。Con都被关闭了吗?
如果没有被关干净,要怎么做才能关闭干净?
[/Quote]

这样写 cn 不会被关闭的。需要自己 去cn.close()。
建议 LZ 这样写:
方法:
public static SqlDataReader getrs(SqlConnection cn,String sql)
{ ... }

调用:
using(SqlConnection cn=new SqlConnection( ...))
{
cn.open();
....
getrs(cn,strSql);
}

这样写 cn 会 自动关闭的。

wc0730 2010-01-06
  • 打赏
  • 举报
回复
是不是有一个类方法直接调用好CON 打开,返回RS后,在应用页面中关闭CON的方法?
wc0730 2010-01-06
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 yan267 的回复:]
C# codepublicstaticint ExecuteNonQuery(SqlConnection connection, CommandType commandType,string commandText,params SqlParameter[] commandParameters)
{if( connection==null )thrownew ArgumentNullException("connection" );// Create a command and prepare it for execution SqlCommand cmd=new SqlCommand();bool mustCloseConnection=false;
PrepareCommand(cmd, connection, (SqlTransaction)null, commandType, commandText, commandParameters,out mustCloseConnection );// Finally, execute the commandint retval= cmd.ExecuteNonQuery();// Detach the SqlParameters from the command object, so they can be used again cmd.Parameters.Clear();if( mustCloseConnection )
connection.Close();return retval;
}


Dispose 只是清理了内存。

其实你运行你的代码,然后打开SQL的进程分析,看看连接是否存在就知道是不是关了。
[/Quote]

我希望自动管理SQLCON。你们这么说是不是没法在类里调用CON然后RETURN RS后自动关闭了?
如果仅仅是using getcon() 的话……那多写一个CON.CLOSE()也不是问题所在……
zcxverygood123456 2010-01-06
  • 打赏
  • 举报
回复
conn.Close();
写这个就可以了。
shinyML 2010-01-06
  • 打赏
  • 举报
回复
用using以后就可以不写conn.close()了
追寻风的自由 2010-01-06
  • 打赏
  • 举报
回复
using  
C# 语言参考
  using 关键字有两个主要用途:
  (一).作为语句,用于定义一个范围,在此范围的末尾将释放对象
  C# 通过 .NET Framework 公共语言运行库 (CLR) 自动释放用于存储不再需要的对象的内存。内存的释放具有不确定性;一旦 CLR 决定执行垃圾回收,就会释放内存。但是,通常最好尽快释放诸如文件句柄和网络连接这样的有限资源。
  using 语句允许程序员指定使用资源的对象应当何时释放资源。为 using 语句提供的对象必须实现 IDisposable 接口。此接口提供了 Dispose 方法,该方法将释放此对象的资源。
  可以在到达 using 语句的末尾时,或者在该语句结束之前引发了异常并且控制权离开语句块时,退出 using 语句。
hitlcyu19 2010-01-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 caoxp_papa 的回复:]
C# codeusing (SqlConnection con=new SqlConnection(constr))
{using (SqlCommand com=new SqlCommand("update TabMailList set classid = @classid where mailid = @mailid",con))
{
com.Parameters.Add("@classid",classid);
com.Parameters.Add("@mailid",mailid);
con.Open();
com.ExecuteNonQuery();
}
}
写在using里边自动关闭
[/Quote]
恩 对滴 using可以释放你不再使用的资源 不需要你自己去释放
yan267 2010-01-06
  • 打赏
  • 举报
回复

public static int ExecuteNonQuery(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
{
if( connection == null ) throw new ArgumentNullException( "connection" );

// Create a command and prepare it for execution
SqlCommand cmd = new SqlCommand();
bool mustCloseConnection = false;
PrepareCommand(cmd, connection, (SqlTransaction)null, commandType, commandText, commandParameters, out mustCloseConnection );

// Finally, execute the command
int retval = cmd.ExecuteNonQuery();

// Detach the SqlParameters from the command object, so they can be used again
cmd.Parameters.Clear();
if( mustCloseConnection )
connection.Close();
return retval;
}




Dispose 只是清理了内存。

其实你运行你的代码,然后打开SQL的进程分析,看看连接是否存在就知道是不是关了。
wc0730 2010-01-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fwacky 的回复:]
using
[/Quote]

using什么?

using了以后在实际运用中的格式又有变化吗?
xsi640 2010-01-06
  • 打赏
  • 举报
回复
没有关干净。。。只有执行conn.close()才都关上了。。。
实际应用中每次增删改查,都会关闭连接。。。
wc0730 2010-01-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ithingcan 的回复:]
using(SqlConnection con = greatcon())
[/Quote]

能稍微详细一点吗?

用了这个USING

在调用的时候什么就有效了什么就无效了?
fwacky 2010-01-06
  • 打赏
  • 举报
回复
using
追寻风的自由 2010-01-06
  • 打赏
  • 举报
回复
using(SqlConnection con = greatcon())
Caoxp_papa 2010-01-06
  • 打赏
  • 举报
回复

using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand com = new SqlCommand("update TabMailList set classid = @classid where mailid = @mailid",con))
{
com.Parameters.Add("@classid",classid);
com.Parameters.Add("@mailid",mailid);
con.Open();
com.ExecuteNonQuery();
}
}

写在using里边自动关闭
yanxin1314 2010-01-06
  • 打赏
  • 举报
回复
加载更多回复(2)

62,046

社区成员

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

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

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

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