我想在并行模式下进行咨询,或者是对SQL进行咨询的更好方法。
咨询花费3分钟从7只股票做7个周期,但我需要花更少的时间,也许是同时做7个咨询并返回结果。
我的代码问题是reader.Read()可能会在咨询之间产生冲击。
List<List<clsExistenciaA>> ListaExistencia = new List<List<clsExistenciaA>>();
SqlConnection objConexion = new SqlConnection();//conexion a sql
try
{
objConexion.ConnectionString = @"Database=DataDB;Data Source=local;User Id=sa;Password=20011$;MultipleActiveResultSets=True";
objConexion.Open();
}
catch { MessageBox.Show("No se puede conectar al servidor"); }
try
{
string almacen;
int i = 0;
foreach(clsExistenciaA A in AlmaceneS)
{
//Parallel.ForEach(AlmaceneS, clsExistenciaA =>
//{
// lock (AlmaceneS)
// {
// almacen = clsExistenciaA.CodigoAlm;
almacen = A.CodigoAlm;
SqlCommand comm = new SqlCommand();//crea command
comm.Connection = objConexion;// se agrega la conexion al comando
comm.CommandType = CommandType.Text;// se define el tipo de comando
string sql = "";
sql = "select c_codigo_alm, v_nombre_alm from invalmacen (nolock) where c_pedido_alm='almacen'";
comm.CommandTimeout = 1000;
comm.CommandText = sql;// se agrega la consulta a el comando
SqlDataReader reader = comm.ExecuteReader();// se ejecuta el comando en un data reader
ListaExistencia.Add(new List<clsExistenciaA>());
string piezaN = "0";
string kiloN = "0";
while(reader.Read())
{
if (reader["pieza"].ToString() != "")
{
piezaN = reader["pieza"].ToString();
}
if (reader["kilos"].ToString() != "")
{
kiloN = reader["kilos"].ToString();
}
ListaExistencia[i].Add(new clsExistenciaA()
{
pro = reader["pro"].ToString(),
nompro = reader["v_nombre_pro"].ToString(),
pieza = Math.Round(double.Parse(piezaN), 2),
kilos = Math.Round(double.Parse(kiloN), 2),
CodigoAlm = almacen,
}); // se agregan los datos a un Ilist
}
reader.Close();
}
////}
//});
return ListaExistencia;
}
catch (Exception ex) {...}
编辑:我尝试了新的conextion但是同样的3分钟。 现在,我尝试过使用&#34; Thread&#34;和它的结果相同
我曾尝试优化查询,但我无法