请帮助我使用Generic Lists如何使用sqlCommand类的三个方法BeginExecuteReader().我使用BeginExecuteReader创建了一个方法,但我不知道这是否是最好的使用方法
public class Empresa { public Empresa() { PkEmpresa = -1; CodigoEmpresa = ""; Descripcion = ""; PkCategoriaEmpresa = -1; } public int PkEmpresa { get; set; } public string CodigoEmpresa { get; set; } public string Descripcion { get; set; } public int PkCategoriaEmpresa { get; set; } public Empresa Shallowcopy() { return (Empresa)this.MemberwiseClone(); } } public class AsyncronousDAL { private static string getConexion() { return "Data Source=DATABASE;Initial Catalog=DATA_BASE;Integrated Security=True;Asynchronous Processing=True"; } public static List<Empresa> ConsultaAsincrona() { List<Empresa> _resultados = new List<Empresa>(); using (sqlConnection conexion = new sqlConnection(getConexion())) { using (sqlCommand commando = new sqlCommand("[dbo].[pruebaAsync]",conexion)) { commando.CommandType = System.Data.CommandType.StoredProcedure; conexion.open(); IAsyncResult resultado = commando.BeginExecuteReader(); using (sqlDataReader reader = commando.EndExecuteReader(resultado)) { while (reader.Read()) { _resultados.Add(new Empresa() { PkEmpresa = Convert.ToInt32(reader["PkEmpresa"]),CodigoEmpresa = reader["CodigoEmpresa"].ToString(),Descripcion = reader["Descripcion"].ToString(),PkCategoriaEmpresa = Convert.ToInt32(reader["PkCategoriaEmpresa"]) }); } } } } return _resultados; } }
解决方法
当您调用BeginExecuteReader时,工作将最终被推送到工作线程,允许您的main继续执行.当您调用EndExecuteReader时,将导致主线程阻塞,直到该任务完成.
如果您立即调用EndExecuteReader – 您实际上并没有获得任何好处(事实上,您正在引入额外的开销).
看一下这里的例子:http://msdn.microsoft.com/en-us/library/7szdt0kc.aspx
The BeginExecuteReader method returns immediately,but until the code
executes the corresponding EndExecuteReader method call,it must not
execute any other calls that start a synchronous or asynchronous
execution against the same sqlCommand object. Calling the
EndExecuteReader before the command’s execution is completed cause the
sqlCommand object to block until the execution is finished.
这是代码的相关部分:
// Although it is not required that you pass the // sqlCommand object as the second parameter in the // BeginExecuteReader call,doing so makes it easier // to call EndExecuteReader in the callback procedure. AsyncCallback callback = new AsyncCallback(HandleCallback); command.BeginExecuteReader(callback,command);
原文地址:https://www.jb51.cc/csharp/92012.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。