I want to do a consult in Parallel mode, or which is the better way to do the consult to SQL.
The consult spends 3 minutes doing 7 cycles from 7 stocks, but I need that spend less time, maybe by doing the 7 consults at the same time and return the result.
My problem with the code is that reader.Read() maybie shock between the consults.
List> ListaExistencia = new List>();
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());
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; }
Juan PelotasPosted Sep 11, 2015, 12:18 PM
ramya bharathPosted Sep 11, 2015, 8:26 AM
Juan PelotasPosted Sep 10, 2015, 3:12 PM
ramya bharathPosted Sep 10, 2015, 2:57 PM
Juan PelotasPosted Sep 10, 2015, 1:23 PM
ramya bharathPosted Sep 10, 2015, 12:54 PM
Juan PelotasPosted Sep 10, 2015, 12:36 PM
Juan PelotasPosted Sep 10, 2015, 12:25 PM
pro,
invproducto.v_nombre_pro,
sum(pieza) as pieza,
Sum(kilos) as kilos,
COSPZA= min(iSnULL(invproducto.n_costolabbdg_pro,0) ),
IsNull(invproducto.c_validarpeso_pro,'') as c_validarpeso_pro,
invproducto.c_unidadcosteo_uni,
c_codigo_uni = invproducto.c_codigo_uni,invproducto.c_unidadvtainv_uni
From invproducto (NOLOCK),
(
SELECT
'M' AS ORD,
fecha,mov,
TIPO,REPAR,
'' AS EMP,
PRO,
'' AS SERIE,
'' AS CODFACREM,
'' AS FACREM,
PIEZA= (cASE when IsNull(c_ajustexuni_mov,'') ='S' and IsNull(c_validarpeso_pro,'') ='S' and C_CODIGO_UNI = '02'
Then n_cantidadxuni_mov
when IsNull(c_ajustexuni_mov,'') ='S' and IsNull(c_validarpeso_pro,'')<>'S' and C_CODIGO_UNI = c_unidadcosteo_uni
Then n_cantidad_mov
when IsNull(c_ajustexuni_mov,'') ='S' and IsNull(c_validarpeso_pro,'')<>'S' and C_CODIGO_UNI <> c_unidadcosteo_uni
Then 0
wHEN IsNull(c_validarpeso_pro,'') <>'S'
THEN n_cantidad_mov
wHEN IsNull(c_validarpeso_pro,'') ='S' and C_CODIGO_UNI='02'
THEN n_cantidadxuni_mov
ELSE
(SELECT parte1.n_cantidadxuni_mov * (S2.N_CANTIDAD_EQU / S2.N_CANTIDADEQUIVALENTE_EQU)
FROM SOIEQUIVALENCIA S2 (NOLOCK)
wHERE S2.C_CODIGO_EQU=
(SELECT mAX(S1.C_CODIGO_EQU) FROM SOIEQUIVALENCIA S1 (NOLOCK)
wHERE parte1.C_CODIGO_UNI = S1.C_CODIGO_UNI
aND S1.C_CODIGOCONV_UNI = '02'
AND S1.C_CODIGO_PRO = parte1.c_codigo_pro
)
)
END),
KILOS = (cASE when IsNull(c_ajustexuni_mov,'') ='S' and C_CODIGO_UNI= '03' and c_unidadcosteo_uni <> '03'
Then n_cantidadxuni_mov
wHEN (c_unidadcosteo_uni='03' or IsNull(c_validarpeso_pro,'') ='S')
THEN n_cantidad_mov
ELSE
(SELECT parte1.n_cantidad_mov * (S2.N_PESO_EQU / S2.N_CANTIDADEQUIVALENTE_EQU )
FROM SOIEQUIVALENCIA S2 (NOLOCK)
wHERE S2.C_CODIGO_EQU=
(SELECT mAX(S1.C_CODIGO_EQU) FROM SOIEQUIVALENCIA S1 (NOLOCK)
wHERE parte1.c_unidadcosteo_uni = S1.C_CODIGO_UNI
aND S1.C_CODIGOCONV_UNI = '03'
AND S1.C_CODIGO_PRO = parte1.c_codigo_pro
)
)
END)
FROM
(
Select
m.c_codigo_mov as mov,
c_tipodoc_mov as tipo,
e.c_codigo_tmv as des,
e.d_documento_ent as fecha,
m.c_codigo_pro AS PRO,
m.n_exiant_mov as exis,
pro.c_unidadcosteo_uni as unicos,
iSnULL(M.C_REPARTOACTIVO_EMP,'') AS REPAR,
M.C_CODIGO_UNI AS UNI,
m.n_cantidadxuni_mov AS CAN,
m.n_cantidad_mov as peso,
IsNull(pro.c_validarpeso_pro,'') as tp,
/* variables nuevas para nuevo calculo */
c_validarpeso_pro = IsNull(pro.c_validarpeso_pro,''),
m.c_ajustexuni_mov,
m.c_codigo_uni,
pro.c_unidadCosteo_uni,
m.n_cantidadxuni_mov,
m.c_codigo_pro,
m.n_cantidad_mov
From invmovimiento m (NOLOCK),
invproducto pro (NOLOCK),
inventrada e (NOLOCK)
Where m.c_codigo_pro=pro.c_codigo_pro
and m.c_tipodoc_mov='E'
and e.c_codigo_ent=m.c_codigo_ent
and m.c_codigo_alm IN ('01','02','03','04','13','15','16') -- HERE WOULD BE THE 7 almacen variable
and (m.c_codigo_pro >= '00000000'
and m.c_codigo_pro <= '99999999')
and e.d_documento_ent < ={ts '2015-09-10 00:00:00.000'}
and e.c_activo_ent = '1'
and pro.c_codigo_prv = '0010'
UNION ALL
Select
m.c_codigo_mov as mov,
c_tipodoc_mov as tipo,
l.c_codigo_tmv as des,
l.d_documento_sal as fecha,
m.c_codigo_pro AS PRO,
m.n_exiant_mov as exis,
pro.c_unidadcosteo_uni as unicos,
iSnULL(M.C_REPARTOACTIVO_EMP,'') AS REPAR,
M.C_CODIGO_UNI AS UNI,
m.n_cantidadxuni_mov AS CAN,
m.n_cantidad_mov as peso,
IsNull(pro.c_validarpeso_pro,'') as tp,
c_validarpeso_pro = IsNull(pro.c_validarpeso_pro,''),
m.c_ajustexuni_mov,
m.c_codigo_uni,
pro.c_unidadCosteo_uni,
m.n_cantidadxuni_mov,
m.c_codigo_pro,
m.n_cantidad_mov
From invmovimiento m (NOLOCK),
invsalida l (NOLOCK),
invproducto pro (NOLOCK)
Where m.c_codigo_pro=pro.c_codigo_pro
and m.c_tipodoc_mov='S'
and l.c_codigo_sal=m.c_codigo_sal
and m.c_codigo_alm IN ('01','02','03','04','13','15','16') -- HERE WOULD BE THE 7 almacen variable
and (m.c_codigo_pro >= '00000000'
and m.c_codigo_pro <= '99999999')
and l.d_documento_sal < ={ts '2015-09-10 00:00:00.000'}
and pro.c_codigo_prv = '0010'
) AS PARTE1
)two
where two.pro=invproducto.c_codigo_pro and invproducto.c_activo_pro='1'
group by pro,invproducto.v_nombre_pro,invproducto.c_validarpeso_pro,invproducto.c_unidadcosteo_uni,c_codigo_uni,invproducto.c_unidadvtainv_uni
ORDER BY PRO
ramya bharathPosted Sep 10, 2015, 11:53 AM
(nolock) where c_pedido_alm in
Check if it is similar to this if so it cant be a sum it should a table with two columns
Juan PelotasPosted Sep 10, 2015, 11:31 AM
ramya bharathPosted Sep 10, 2015, 4:22 AM
For ex executing 7 query takes more time then executing one query to fetch 7 data
Juan PelotasPosted Sep 9, 2015, 8:49 PM
ramya bharathPosted Sep 9, 2015, 8:39 PM
Instead of doing all the things inside a loop you can use In statement in your query and pqss the entire array and store the result in a data set jnsteqd of data reader and could have binded it to the other values .
Refer this for in statement http://www.w3schools.com/sql/sql_in.asp