¿Cómo ejecutar una URL desde SQL Server? Transact-SQL

Es posible ejecutar una url desde SQL Server, esto es útil si quieres realizar algunas tareas programadas por medio de SQL Agent, tareas que inicien por una Url de tu pagina o sistema.

A continuación te muestro cómo es posible ejecutar una URL desde Sql Server.


-- declaramos una variable cadena y ponemos la url a invocar
Declare @url varchar(max)='https://hdeleon.net/'
-- declaramos una variable entero, para guardar el id del objeto OLE que crearemos
Declare @Object as Int;
-- Una variable cadena para la respuesta
Declare @ResponseText as Varchar(8000);

-- creamos un objeto OLE
Exec sp_OACreate 'MSXML2.XMLHTTP', @Object OUT;
-- Ejecutamos la url por medio de post
Exec sp_OAMethod @Object, 'open', NULL, 'post',@url,'false'
Exec sp_OAMethod @Object, 'send'
Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT

-- imprimimos resultado
Select @ResponseText

--eliminamos nuestro id de objeto OLE
Exec sp_OADestroy @Object

Con esto ya puedes ejecutar cualquier URL desde Sql Server.

¿Cómo poner el formato correcto de fecha para facturación electrónica 3.3 en C# .Net? cfdi SAT

Para ponerle el formato correcto para un xml que será timbrado con las reglas de cfdi 3.3, vamos a aplicar el formato a un DateTime de la siguiente forma:


//teniendo el dato en un DateTime en una variable llamada Fecha

string sFechaSAT= Fecha.ToString("yyyy-MM-ddTHH:mm:ss");

Así tu fecha tendrá el formato correcto para el timbrado.

¿Cómo poner la ruta relativa a un archivo SQLite en una conexión en .Net?

Para que nuestra conexión a un archivo de SQLite sea relativa y funcione en cualquier equipo solo basta con agregar “.\” al inicio de la ruta en nuestra cadena de conexión (AppConfig o WebConfig).

Por ejemplo si nuestra base de datos está en una carpeta de nombre Data y el archivo se llama MiData.db, quedaría de la siguiente manera:


data source=.\Data\MiData.db

Recuerda que el archivo de la base de datos tenga en su propiedad la opción “Copiar siempre”, para que este en la carpeta Debug o Release según corresponda.

¿Cómo crear el XML para cfdi 3.3 facturación electrónica? – Limpiando código – SAT #2

Este es el segundo video de cómo crear un xml para la creación del cfdi 3.3 de acuerdo a las especificaciones del SAT:

Clase para crear xml: clic para descargar

Primer video – ¿Cómo convertir archivos XSD a clases de C# .Net?: https://www.youtube.com/watch?v=XlTz0NRQLm4

Catálogos SAT Mysql: https://hdeleon.net/catalogos-para-facturar-3-3-sat-en-mysql/

Catálogos SAT Sql Server: https://hdeleon.net/catalogos-para-facturar-cfdi-3-3-sat-en-sql-server/


Comprobante oComprobante = new Comprobante();
oComprobante.Folio = "666";

ComprobanteEmisor oEmisor = new ComprobanteEmisor();
oEmisor.Rfc = "POWE870601DM7";
oEmisor.Nombre = "Una razón";
oEmisor.RegimenFiscal = c_RegimenFiscal.Item605;

ComprobanteReceptor oReceptor = new ComprobanteReceptor();
 oReceptor.Nombre = "Pepe";
 oReceptor.Rfc = "PEPE080801JH1";

oComprobante.Emisor = oEmisor; oComprobante.Receptor = oReceptor;

//SERIALIZAMOS.-------------------------------------------------
string pathXML = @"C:\miPrimerXML.xml";

XmlSerializer oXmlSerializar = new XmlSerializer(typeof(Comprobante));

string sXml = "";

using (var sww= new StringWriter()) {
       using (XmlWriter writter = XmlWriter.Create(sww)) {

               oXmlSerializar.Serialize(writter,oComprobante);
               sXml = sww.ToString();
       }
}

//guardamos el string en un archivo 

System.IO.File.WriteAllText(pathXML,sXml);

¿Cómo cambiar el color de fondo de un Formulario que es contenedor de formularios secundarios MDI? C# .Net

Cuando creamos nuestro sistema en Windows form y el formulario principal lo convertimos en MDI, la mayoría de veces queremos cambiar el color gris por defecto a otro, pero nos damos cuenta que al cambiar el color no cambia el gris oscuro del MDI, esto es porque al crear el formulario MDI en realidad se está incorporando otro control de tipo MdiClient.

A continuación te muestro como podemos cambiar el color del MdiCliente:


//Haz esto en el evento Load de tu formulario MDI

 MdiClient oMDI;

//recorremos todos los controles hijos del formulario
foreach (Control ctl in this.Controls)
{
        try
        {
           // Intentamos castear el objeto MdiClient
           oMDI = (MdiClient)ctl;

          // Cuando sea casteado con éxito, podremos cambiar el color así
          oMDI.BackColor = Color.White;
        }
        catch (InvalidCastException exc)
        {
          // No hacemos nada cuando el control no sea tupo MdiClient
        }
}

20 de febrero, comienzan las nuevas politicas de youtube – La opinión de un desarrollador de software

Esta es mi opinión sobre las nuevas políticas de youtube, que comienzan el 20 de febrero del 2018.

Como saben yo tengo algunos videos en youtube, por lo cual no me considero un youtuber (aun), y por lo mismo no lo considero un negocio (aun).

Con los pocos videos que yo tengo en youtube, gano la súper modesta cantidad de 20 a 70 pesos mexicanos mensuales (1 – 3.5 usd), dependiendo las visitas que tenga en el mes claro está. Algo distinto con adsense en este blog donde si saco más de 10 veces esa cantidad (Ya hablare de esto en otra entrada).

Hace un mes me llego un correo de que mis videos ya no serían monetizados ya que no cuento con los nuevos límites mínimos que debe tener un canal que son 4000 horas y al menos 1000 suscriptores (en este momento tengo 260 suscriptores (vengo del futuro y en noviembre 2019 llegas a los 10k (vengo de un futuro más lejano y el 7 de junio del 2020 llegaste a los 20k (vengo de un futuro mucho más lejano y el 7 de septiembre llegaste a los 62k (VENGO DE UN FUTURO AUN MÁS LEJANO Y LLEGASTE A 110K, recibiste una placa, siendo 7 de septiembre del 2022))))), puedes suscribirte a mi canal para ser el número 261 dando clic aquí), una cantidad absurda para personas que comiencen a crear contenido este año, es decir, los canales nuevos deberán esforzarse mucho más para poder sacar provecho.

Primero hablare de las cosas negativas y finalizare con los aspectos positivos.

Últimamente las tendencias en youtube es todo por lo cual yo deje de ver televisión hace años: sexismo, chismes, futbol (no me gusta, lo siento), novelas etc; lo que es ridículo es que contenido como ese sean canales con millones de suscriptores, canales que muchas veces solo copian y pegan la basura que ya se encuentra en televisión.

Youtube se ha convertido en una guerra de youtubers, donde se viven de envidia y palabrería entre youtubers, criticando trabajo mutuo, y lo peor, hasta hacen video de esto para obtener visitas, nuevamente, utilizan la misma fórmula por la cual huí de la televisión, crear controversia. Ustedes saben que youtubers son, ya que este tipo de guerras infantiles las hay en todas las áreas de entretenimiento rondando por esta red social.

Si tú quieres comenzar con tu canal y esperar ganar mucho dinero inmediatamente, si lo quieres hacer solo por dinero, haz videos estúpidos, haz videos sexistas, y haz videos controversiales, y veras como te llenas de suscriptores. Ya que estas nuevas políticas tienden a que los nuevos canales sean de contenido basura, ya que la mayoría hace videos para ganar un poco de dinero, y quieren  ganar dinero rápido y sin esfuerzo. Ya tienes la clave, adelante.

De las cosas buenas que comenzaran a surgir con estas políticas, es contenido más apropiado para todas las edades (espero), ya que hay mucha basura que si yo tuviera hijos no me gustaría que lo vieran. Haciendo la restricción de un video que sea monetizado y ser revisado por un ser humano (es lo que dicen), se podrá filtrar el contenido no apropiado para toda las edades (todo comenzó por el tipo que grabo un cadáver).

Existe otro punto positivo en esto, que no todas las personas que hacemos videos, deseamos ser millonarios con esto, sino solo compartir el conocimiento o promover algún producto que tenemos ya sea gratuito o de compra (yo promuevo los dos), y el punto positivo, es que, como no ganamos ni vivimos de esto, seguiremos haciendo material de calidad, ya que las políticas a algunas personas que hacemos videos, realmente nos valen madre (como decimos en México), pero como espectador, estaré al tanto de como el material de entretenimiento en youtube decae o mejora, algo que solo el tiempo dirá.

¿Cómo eliminar las sesiones o conexiones sobre una Base de datos en SQL Server?

Cuando deseamos eliminar una base de datos algunas veces Sql Server no nos lo permite ya que la base de datos está siendo utilizada. Esto puede ser por sistemas que no cierran la conexión o procesos que están conectándose las 24 horas del día.

Para eliminar las conexiones, primero debemos saber cuáles son, y para ello puedes ejecutar la siguiente consulta, remplazando el nombre de tu base de datos en la instrucción Where.


SELECT   *
FROM     sys.dm_exec_sessions
WHERE    DB_NAME(database_id) = 'Nombre_De_Tu_BaseDeDatos'

Una vez que hemos obtenido algo parecido a la siguiente lista:

Debemos ejecutar la función Kill seguida del número de la sesión (el primer campo de la imagen) a eliminar:


KILL 97

Y listo, de esa manera se elimina un proceso que nunca fue cerrado.

¿Cómo aplicar un update a varias filas por medio de EntityFramework.Extended? C# .Net

Existen varias formas de modificar varios elementos en conjunto por medio de Entity Framework.

Aquí te muestro como hacerlo sin utilizar una librería externa, es decir, modificar varios objetos sin EntityFramework.Extended.

Igual te recuerdo que utilizar EntityFramework.Extended como Entity Framework nativo no las recomiendo cuando vas a modificar más de mil datos, mejor utiliza un procedimiento almacenado.

La ventaja que veo al utilizar EntityFramework.Extended es un aspecto de sintaxis ya que de esta manera evitamos hacer el recorrido de los elementos e ir modificando objeto por objeto, con esta librería es de una forma más sencilla para el programador.

Para el siguiente ejemplo,  supongamos que tenemos una tabla llamada Persona, que debemos modificar la edad a 10 años de todas las personas de Nombre “Juan”. Seria de la siguiente manera:


using(MiEntity db= new MiEntity()){

  //realizamos la modificación sin foreach, ni SaveChanges()
  db.Persona.Where(d => d.Nombre=="Juan")
 .Update(x => new Persona() { Edad = 10 });

}

De esta manera no necesitamos el método SaveChanges(), ya que Update lo hace internamente.

¿Cómo aplicar un update a varias filas por medio de Entity Framework? C# .Net

Existen varias formas de modificar varios elementos en conjunto por medio de Entity Framework.

Te mostrare como realizar una forma de cómo hacerlo a continuación. Teniendo una tabla llamada Persona, supongamos que debemos modificar la edad a 10 años de todas las personas de Nombre “Juan”. Seria de la siguiente manera:


using(MiEntity db= new MiEntity()){

  //Obtenemos todos los Juanes
  IQuearyable<Persona> lst = db.Persona.Where(d=>d.Nombre=='Juan');

  //recorremos la lista
  foreach(Persona oPersona in lst){
      //asignamos la edad
      oPersona.Edad=10;

  }

 //modificamos los datos en la base de datos
  db.SaveChanges();

}

Cuando tengas la necesidad de editar más de mil filas en un proceso, mejor hazlo con un procedimiento almacenado (Stored procedure).

Aquí te muestro otra forma de hacer la modificación de varios objetos utilizando EntityFramework.Extended.