hasta ahora Siempre he utilizado una estructura similar para obtener datos de base de datos y rellenar un DataTableEliminación de comandos SQL y cerrar la conexión
public static DataTable GetByID(int testID)
{
DataTable table = new DataTable();
string query = @"SELECT * FROM tbl_Test AS T WHERE T.testID = @testID";
using (SqlConnection cn = new SqlConnection(Configuration.DefaultConnectionString))
{
SqlCommand cmd = new SqlCommand(query, cn);
cmd.Parameters.Add("@testID", SqlDbType.Int).Value = testID;
cn.Open();
table.Load(cmd.ExecuteReader());
}
return table;
}
Ahora vi algunas advertencias en el análisis de la acumulación:
TestService. cs (37): CA2000: Microsoft.Reliability: en el método 'TestService.GetByID (int)', el objeto 'table' no se elimina a lo largo de todas las rutas de excepción. Call System.IDisposable.Dispose en object 'table' antes de que todas las referencias estén fuera del alcance.
TestService.cs (42): CA2000: Microsoft.Reliability: En el método 'TestService.GetByID (int)', llame a System.IDisposable.Dispose en el objeto 'cmd' antes de que todas las referencias estén fuera del alcance.
¿Debo cambiar mi código en
public static DataTable GetByID(int testID)
{
DataTable table = new DataTable();
string query = @"SELECT * FROM tbl_Test AS T WHERE T.testID = @testID";
using (SqlConnection cn = new SqlConnection(Configuration.DefaultConnectionString))
{
using (SqlCommand cmd = new SqlCommand(query, cn))
{
cmd.Parameters.Add("@testID", SqlDbType.Int).Value = testID;
cn.Open();
table.Load(cmd.ExecuteReader());
}
}
return table;
}
¿Qué hacer con objeto DataTable? ¿Es una buena práctica colocar SqlCommand dentro del uso?
Gracias
Saludos
Sí. Tu código es correcto ahora Siempre descarte la clase que implementa IDisposable. Pero, ¿SqlDataReader también es desechable? – lnu
¿Desecha la DataTable que devuelve? – Kangkan
Creo que el lector es desechable, sí, y quizás ése sea el problema de que WRT no esté dispuesta, ya que contiene un lector que no ha sido explícitamente cerrado, aunque espero que se haya cerrado implícitamente cuando se haya dispuesto el cmd. –