private void pPostLocal(Int64 ID, DataTable datos, string strSpi, string strSpu) { clsParametros clsParametros = new clsParametros(); string StringDeConexion = clsParametros.StringDeConexion; string StringDeConexionRemoto = clsParametros.StringDeConexionRemoto; Data.clsSincronizar objDal = new Data.clsSincronizar(StringDeConexion); Data.clsSincronizar obDalRemoto = new Data.clsSincronizar(StringDeConexionRemoto); foreach (DataRow dr in datos.Rows) { List <OleDbParameter> Parametros = new List <OleDbParameter>(); foreach (DataColumn dc in datos.Columns) { //var field1 = dtRow[dc].ToString(); string tipoDato = dc.DataType.Name.ToString().ToUpper(); string nombreParam = dc.ColumnName; OleDbParameter item = new OleDbParameter(); if ((nombreParam.ToUpper() != "ID_SINC_PROC") && (nombreParam.ToUpper() != "ID_SINC")) { item.ParameterName = "@" + nombreParam; switch (tipoDato) { case "DECIMAL": item.OleDbType = OleDbType.Decimal; break; case "STRING": item.OleDbType = OleDbType.VarChar; break; case "DATETIME": item.OleDbType = OleDbType.DBTimeStamp; break; default: break; } item.Value = dr[nombreParam]; Parametros.Add(item); } } //graba datos genericos if (objDal.fnSetDatosGenericos(strSpi, Parametros)) { obDalRemoto.fnSet(strSpu, ID, Convert.ToInt64(dr["id_sinc_proc"]), Convert.ToInt64(dr["id_sinc"])); funciones.Mensaje(" Sincronizado id remoto = " + Convert.ToInt64(dr["id_sinc"]).ToString()); } } }
public void NonSqlToLocal() { //sincroniza de base de datos no relacional a base de datos local //se trae de la tabla de control las tablas que se tiene que leer de la non-sql funciones.Mensaje("SYNC_NONSQL_LOCAL Sincronizando de NON-SQL a LOCAL"); try { //leer las tablas que necesitan actualizarse clsParametros clsParametros = new clsParametros(); string StringDeConexion = clsParametros.StringDeConexion; DataTable dtResultado = new DataTable(); Data.clsSincronizar objDal = new Data.clsSincronizar(StringDeConexion); dtResultado = objDal.fnGetTablasSincronizarNonSql(); if (dtResultado != null && dtResultado.Rows.Count > 0) { //recorre la tabla para llamar cada sp y enviar a sincronizar a firebase foreach (DataRow row in dtResultado.Rows) { Int64 id = row["id"] != DBNull.Value ? Convert.ToInt64(row["id"]) : 0; string strTbl = row["objeto"] != DBNull.Value ? Convert.ToString(row["objeto"]) : ""; string strNodeSource = row["node_origen"] != DBNull.Value ? Convert.ToString(row["node_origen"]) : ""; string strSpi = row["nombre_spi"] != DBNull.Value ? Convert.ToString(row["nombre_spi"]) : ""; string strOrdenParametros = row["orden_sp_parametros"] != DBNull.Value ? Convert.ToString(row["orden_sp_parametros"]) : ""; if (strNodeSource == "" || strTbl == "" || strSpi == "" || strOrdenParametros == "") { funciones.Mensaje("No se especifico nombre de tabla, spi, orden parametros o Node verifique "); } else { funciones.Mensaje("Leyendo datos de: " + strTbl + ' ' + strNodeSource); //se hace get para obtener todos los datos a sincronizar pPostLocalFromNonSql(strNodeSource, strSpi, strOrdenParametros); } } } else { funciones.Mensaje("Sin datos que sincronizar"); } } catch (Exception ex) { string lStrMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name; funciones.Mensaje("ERR: " + lStrMethodName + ' ' + ex.ToString()); } }
private DataTable OrdenarParametrosYGrabar(List <OleDbParameter> Parametros , string LlaveNivel1 , string LlaveNivel2 , string strOrdenParametros , Data.clsSincronizar objDal , string strSpi , string node) { DataTable dtResultado = new DataTable(); //ordena los parametros que se insertaran y los graba a la base de datos //graba las llaves que siempre tienen que ir Parametros.Add(new OleDbParameter("@PARAM_LLAVE_NIVEL1", LlaveNivel1)); Parametros.Add(new OleDbParameter("@PARAM_LLAVE_NIVEL2", LlaveNivel2)); //Ordena los parametros para que sean enviados a la base de datos como los espera el sp string[] OrdenParametros = strOrdenParametros.Split(','); List <OleDbParameter> ParametrosOrdenados = new List <OleDbParameter>(); foreach (string nombreparam in OrdenParametros) { //busca el parametro en los parametros ya armados foreach (OleDbParameter NoOrdenado in Parametros) { if (nombreparam.ToString().ToUpper().Trim() == NoOrdenado.ParameterName.ToString().ToUpper().Trim().Replace("@", "")) { OleDbParameter itemParam = new OleDbParameter(); itemParam.ParameterName = NoOrdenado.ParameterName; itemParam.OleDbType = NoOrdenado.OleDbType; itemParam.Value = NoOrdenado.Value; ParametrosOrdenados.Add(itemParam); } } } //Manda a grabar a la base de datos dtResultado = objDal.fnGetDatosGenericos(strSpi, ParametrosOrdenados); return(dtResultado); }
private void pPostEndPoint(DataTable datos, string llave, string node, Data.clsSincronizar objDal, string strSpu, Int64 idTablaSincronizada) { string JSon = ""; string EndPoint = ""; clsParametros param = new clsParametros(); try { //OBTIENE LOS DATOS DEL NODO EndPoint = param.FireBaseDb + "/" + param.FireBaseCoreData; FirebaseDB firebaseDBGet = new FirebaseDB(EndPoint); // se recorre foreach (DataRow row in datos.Rows) { try { DataTable dtRow = datos.Clone(); dtRow.LoadDataRow(row.ItemArray, true); FirebaseDB firebaseDBGetNode = firebaseDBGet.NodePath(node + "/" + row[llave].ToString()); FirebaseResponse getResponse = firebaseDBGetNode.Get(); if (getResponse.JSONContent != "null") { // el contenido trae datos del GET // elimina el nodo FirebaseResponse delResponse = firebaseDBGetNode.Delete(); if (delResponse.Success) { funciones.Mensaje("response delete existing :" + row[llave].ToString()); } } JSon = JsonConvert.SerializeObject(funciones.DatatableToDictionary(dtRow, llave), Newtonsoft.Json.Formatting.Indented); ////post FirebaseDB firebaseDB = new FirebaseDB(EndPoint); FirebaseDB firebaseDBNode = firebaseDB.NodePath(node); FirebaseResponse patchResponse = firebaseDBNode.Patch(JSon); if (patchResponse.Success) { funciones.Mensaje("datos grabados :" + row[llave].ToString()); //marcar la fila en la base de datos para no volver a sincronizar //marca la tabla para no volverla a sincronizar Boolean actulizado = objDal.fnSet(strSpu, idTablaSincronizada, Convert.ToInt64(row["id_sinc_proc"].ToString())); } else { funciones.Mensaje("response failed :" + patchResponse.ErrorMessage.ToString()); } } catch (Exception ex) { string lStrMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name; funciones.Mensaje("ERR: " + lStrMethodName + ' ' + ex.ToString()); } } } catch (Exception ex) { string lStrMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name; funciones.Mensaje("ERR: " + lStrMethodName + ' ' + ex.ToString()); } }
// lee los datos de una ubicacion non-sql y la graba en el servidor local private void pPostLocalFromNonSql(string node, string strSpi, string strOrdenParametros) { string EndPoint = ""; clsParametros param = new clsParametros(); Data.clsSincronizar objDal = new Data.clsSincronizar(param.StringDeConexion); try { //OBTIENE LOS DATOS DEL NODO EndPoint = param.FireBaseDb + "/" + param.FireBaseAppData; FirebaseDB firebaseDBGet = new FirebaseDB(EndPoint); FirebaseDB firebaseDBGetNode = firebaseDBGet.NodePath(node); FirebaseResponse getResponse = firebaseDBGetNode.Get(); if (getResponse.JSONContent != "null") { //recpuera los valores del nodo string jsonstr = getResponse.JSONContent.ToString(); JObject Obj = JObject.Parse(jsonstr); //recorre los valores del nodo en arreglos foreach (JToken arreglo in Obj.SelectToken("$")) { if (arreglo.HasValues) { //se recorren los cada uno de las llaves nivel 2 foreach (JObject tupla in arreglo.Children <JObject>()) { try { string LlaveNivel1 = tupla.Path.ToString(); //recorre los valores foreach (JProperty prop in tupla.Properties()) { string LlaveNivel2 = prop.Name; JObject item = JObject.Parse(prop.Value.ToString()); List <OleDbParameter> Parametros = new List <OleDbParameter>(); foreach (JProperty registro in item.Properties()) { string campo = registro.Name; string tipoDato = registro.Value.Type.ToString().ToUpper(); OleDbParameter itemParam = new OleDbParameter(); itemParam.ParameterName = "@" + campo; switch (tipoDato) { case "FLOAT": itemParam.OleDbType = OleDbType.Decimal; break; case "STRING": itemParam.OleDbType = OleDbType.VarChar; break; case "OBJECT": itemParam.OleDbType = OleDbType.VarChar; break; case "INTEGER": itemParam.OleDbType = OleDbType.Integer; break; default: break; } itemParam.Value = (tipoDato == "OBJECT") ? registro.Value.ToString() : registro.Value; Parametros.Add(itemParam); } if (Parametros.Count != 0) { DataTable dtResultado = new DataTable(); Int64 RegistroInsertados = 0; string strCodAccion = ""; dtResultado = OrdenarParametrosYGrabar(Parametros, LlaveNivel1, LlaveNivel2, strOrdenParametros, objDal, strSpi, node); RegistroInsertados = Convert.ToInt64(dtResultado.Rows[0]["REGISTROS"].ToString()); strCodAccion = dtResultado.Rows[0]["COD_ACCION"].ToString(); if (RegistroInsertados != 0) { funciones.Mensaje("Registros (" + RegistroInsertados.ToString() + ") grabados de :" + node + " | " + LlaveNivel1.ToString() + " | " + LlaveNivel2.ToString()); } // acciones a tomar con los nodos despues de insertados los datos switch (strCodAccion) { case "ELIMINAR_SI": //elimina el insertado FirebaseDB firebaseDBNode = firebaseDBGet.NodePath(node + "/" + LlaveNivel1 + "/" + LlaveNivel2); FirebaseResponse delResponse = firebaseDBNode.Delete(); if (delResponse.Success) { funciones.Mensaje("elimina datos en :" + node + "|" + LlaveNivel1.ToString() + "|" + LlaveNivel2.ToString()); } break; default: break; } } } } // try for each catch (Exception ex) { string lStrMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name; funciones.Mensaje("ERR AL PROCESAR : " + arreglo.ToString() + " Exeption " + ex.ToString()); } // catch } // for each jobj tupla } // if arreglo has values } // for each arreglo in ojb } // if get response else { funciones.Mensaje("Sin datos que actualizar :" + node); } } catch (Exception ex) { string lStrMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name; funciones.Mensaje("ERR: " + lStrMethodName + ' ' + ex.ToString()); } }
public void CoreData() { try { funciones.Mensaje("SYNC_CORE_DATA Sincronizando a CORE_DATA"); //leer las tablas que necesitan actualizarse clsParametros clsParametros = new clsParametros(); string StringDeConexion = clsParametros.StringDeConexion; DataTable dtResultado = new DataTable(); Data.clsSincronizar objDal = new Data.clsSincronizar(StringDeConexion); dtResultado = objDal.fnGetTablasSincronizar(); if (dtResultado != null && dtResultado.Rows.Count > 0) { //recorre la tabla para llamar cada sp y enviar a sincronizar a firebase foreach (DataRow row in dtResultado.Rows) { Int64 id = row["id"] != DBNull.Value ? Convert.ToInt64(row["id"]) : 0; string strSpc = row["nombre_spc"] != DBNull.Value ? Convert.ToString(row["nombre_spc"]) : ""; string strSpu = row["nombre_spu"] != DBNull.Value ? Convert.ToString(row["nombre_spu"]) : ""; string strTbl = row["objeto"] != DBNull.Value ? Convert.ToString(row["objeto"]) : ""; string strLlave = row["llave"] != DBNull.Value ? Convert.ToString(row["llave"]) : ""; string strNode = row["node_destino"] != DBNull.Value ? Convert.ToString(row["node_destino"]) : ""; if (strSpc == "" || strTbl == "" || strLlave == "" || strNode == "" || strSpu == "") { funciones.Mensaje("No se especifico nombre de tabla, SPC, llave o Node verifique "); } else { funciones.Mensaje("Leyendo datos de: " + strTbl + ' ' + strSpc); //se manda a llamar el spc DataTable dtDatos = new DataTable(); dtDatos = objDal.fnGetDatosGenericos(strSpc); if (dtDatos != null && dtDatos.Rows.Count > 0) { //tiene datos los manda a EndPoint //dtDatos -- lleva en conjunto de datos pendiente de sincronizar, lo que devuelve el spc //strLlave -- lo que usara para grabar los datos en firebase como llave, es lo mismo que esta en el Db2 //obDal -- servira para llamar el spu //strSpu -- spu de actualizaciĆ³n de la tupla sincronizada //id -- id del proceso o tabla que se esta sincronizando corresponde a app_tbl_tablas_sinc pPostEndPoint(dtDatos, strLlave, strNode, objDal, strSpu, id); } else { funciones.Mensaje("Sin datos en " + strSpc); } } } } else { funciones.Mensaje("Sin datos que sincronizar"); } } catch (Exception ex) { string lStrMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name; funciones.Mensaje("ERR: " + lStrMethodName + ' ' + ex.ToString()); //throw new Exception(lStrMethodName, ex); } //Console.ReadLine(); }
public void RemoteToLocal() { try { funciones.Mensaje("SYNC_REMOTE_LOCAL Sincronizando de REMOTE a LOCAL"); //leer las tablas que necesitan actualizarse clsParametros clsParametros = new clsParametros(); string StringDeConexionRemoto = clsParametros.StringDeConexionRemoto; DataTable dtResultado = new DataTable(); Data.clsSincronizar objDal = new Data.clsSincronizar(StringDeConexionRemoto); dtResultado = objDal.fnGetTablasSincronizar(); if (dtResultado != null && dtResultado.Rows.Count > 0) { //recorre la tabla para llamar cada sp y enviar a sincronizar a firebase foreach (DataRow row in dtResultado.Rows) { Int64 id = row["id"] != DBNull.Value ? Convert.ToInt64(row["id"]) : 0; string strSpc = row["nombre_spc"] != DBNull.Value ? Convert.ToString(row["nombre_spc"]) : ""; string strSpu = row["nombre_spu"] != DBNull.Value ? Convert.ToString(row["nombre_spu"]) : ""; string strTbl = row["objeto"] != DBNull.Value ? Convert.ToString(row["objeto"]) : ""; string strSpi = row["nombre_spi_destino"] != DBNull.Value ? Convert.ToString(row["nombre_spi_destino"]) : ""; if (strSpc == "" || strTbl == "" || strSpi == "" || strSpu == "") { funciones.Mensaje("No se especifico nombre de tabla, SPC, spi, spu en tabla sincronizacion remota "); } else { funciones.Mensaje("Leyendo datos remotos de: " + strTbl + ' ' + strSpc); //se manda a llamar el spc DataTable dtDatos = new DataTable(); dtDatos = objDal.fnGetDatosGenericos(strSpc); if (dtDatos != null && dtDatos.Rows.Count > 0) { //pega los datos en el servidor local pPostLocal(id, dtDatos, strSpi, strSpu); } else { funciones.Mensaje("Sin datos en " + strSpc); } } } } else { funciones.Mensaje("Sin datos que sincronizar"); } } catch (Exception ex) { string lStrMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name; funciones.Mensaje("ERR: " + lStrMethodName + ' ' + ex.ToString()); //throw new Exception(lStrMethodName, ex); } funciones.Mensaje("Fin de la sincronizacion "); //Console.ReadLine(); }