Pau*_*sey 3 .net c# odbc using
我正在使用这样的辅助方法:
private OdbcCommand GetCommand(string sql)
{
string conString = "blah";
var con = new OdbcConnection(conString);
var cmd = new OdbcCommand(sql, con);
return cmd;
}
Run Code Online (Sandbox Code Playgroud)
然后我像这样使用它:
using (var cmd = GetCommand("select * from myTable")
{
cmd.connection.open();
using(var reader = cmd.ExecuteReader())
{
}
}
Run Code Online (Sandbox Code Playgroud)
这是第二个例子:
public static OdbcDataReader GetReader(string conString,string sql)
{
var cmd = GetCommand(conString, sql);
cmd.Connection.Open();
return cmd.ExecuteReader();
}
Run Code Online (Sandbox Code Playgroud)
像这样使用:
using(var reader = GetReader("blah","select * from blah")
{
}
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,我处理连接和cmd对象?我认为连接没有被放在第一个,第二个连接和cmd都没有,是吗?
我是否需要做很长的事情来确保正确处理,或者是否有更短的方法?
using (var con ...)
using (var cmd)
using (var reader)
Run Code Online (Sandbox Code Playgroud)
简而言之,如果有Dispose,那么你应该调用它.您不能假设另一个对象将处置您为其传递的对象.
处理命令对象时,不会释放连接对象,因为在完成命令后可以再次使用该连接.处理每种方法是最好的方法.
对于将 Reader 包装在 using 块中的两个示例,如果您使用接受 CommandBehavior 的覆盖并将其设置为“CloseConnection”,您将关闭与现有代码的连接
using(var reader = cmd.ExecuteReader(CommandBehavior.CloseConnection)){}
Run Code Online (Sandbox Code Playgroud)
请参阅http://msdn.microsoft.com/en-us/library/s9bz2k02.aspx
Microsoft 知道在使用读取器时连接必须保持打开状态,因此创建了在读取器关闭时关闭连接的选项。
您是正确的,命令没有在第二个示例中被处理。
| 归档时间: |
|
| 查看次数: |
1532 次 |
| 最近记录: |