C# 如何修复此CA2000 for SqlCommand?
我试图执行如下SQL查询,但VisualStudio抱怨出现CA2000问题C# 如何修复此CA2000 for SqlCommand?,c#,.net,ca2000,C#,.net,Ca2000,我试图执行如下SQL查询,但VisualStudio抱怨出现CA2000问题 public static IDictionary<string, string> TemplateDirectories(string connectionString) { var directories = new Dictionary<string, string>(); using (var connection = new SqlConnection(connecti
public static IDictionary<string, string> TemplateDirectories(string connectionString) {
var directories = new Dictionary<string, string>();
using (var connection = new SqlConnection(connectionString)) {
connection.Open();
using (var command = new SqlCommand { Connection = connection, CommandText = "select * from PATHS" }) {
var reader = command.ExecuteReader();
while (reader.Read())
directories[reader["CODE"].ToString()] = reader["PATH"].ToString();
reader.Close();
}
}
return directories;
}
公共静态IDictionary TemplateDirectory(字符串连接字符串){
var directories=newdictionary();
使用(var连接=新的SqlConnection(connectionString)){
connection.Open();
使用(var command=newsqlcommand{Connection=Connection,CommandText=“select*from path”}){
var reader=command.ExecuteReader();
while(reader.Read())
目录[reader[“CODE”].ToString()]=reader[“PATH”].ToString();
reader.Close();
}
}
返回目录;
}
错误CA2000…对象“new SqlCommand()”未全部释放
异常路径。对对象“new”调用System.IDisposable.Dispose
在所有对它的引用都超出范围之前
我尝试了几种方法来修复它,但没有人成功。那么如何修复呢?请尝试显式地分配
命令
参数:
using (var command = new SqlCommand())
{
command.Connection = connection;
command.CommandText="select * from PATHS";
var reader = command.ExecuteReader();
while (reader.Read())
directories[reader["CODE"].ToString()] = reader["PATH"].ToString();
reader.Close();
}
尝试显式分配
命令
参数:
using (var command = new SqlCommand())
{
command.Connection = connection;
command.CommandText="select * from PATHS";
var reader = command.ExecuteReader();
while (reader.Read())
directories[reader["CODE"].ToString()] = reader["PATH"].ToString();
reader.Close();
}
这是因为使用对象初始值设定项时存在陷阱 已初始化
SqlCommand
的方式,如果在初始化对象时发生一些异常,则SqlCommand
将保持未处理状态
那么解决办法是什么呢。以老式的方式声明对象,以消除警告-
using (var command = new SqlCommand())
{
command.Connection = connection;
command.CommandText="select * from PATHS";
...
}
我发现了一篇关于这一点的非常好的文章,它提供了解决问题的更多细节和方法-
话虽如此,对于这个特殊问题,最好使用SqlCommand
的构造函数,并像这样传递命令文本和连接对象(提供:Damien_the_unsiver的评论)
这是因为使用对象初始值设定项时存在陷阱 已初始化
SqlCommand
的方式,如果在初始化对象时发生一些异常,则SqlCommand
将保持未处理状态
那么解决办法是什么呢。以老式的方式声明对象,以消除警告-
using (var command = new SqlCommand())
{
command.Connection = connection;
command.CommandText="select * from PATHS";
...
}
我发现了一篇关于这一点的非常好的文章,它提供了解决问题的更多细节和方法-
话虽如此,对于这个特殊问题,最好使用SqlCommand
的构造函数,并像这样传递命令文本和连接对象(提供:Damien_the_unsiver的评论)
试着用using?Hi@garethb包装你的阅读器,我试着用(var reader=command.ExecuteReader()){…},但这个CA2000仍然抱怨..答案是正确的,它可以通过避免使用初始值设定项来修复-但你为什么要使用它呢?
SqlCommand
有一个特定的构造函数,它接受命令的文本和SqlConnection对象。请尝试使用?Hi@garethb将您的读取器包装在一个文件中,我尝试了使用(var reader=command.ExecuteReader()){…
,但是这个CA2000仍然在抱怨..答案是正确的,它可以通过避免使用初始值设定项来修复-但是你为什么要使用初始值设定项呢?SqlCommand
有一个特定的构造函数,它接受命令文本和SqlConnection对象。