Buscar
viernes, 10 de junio de 2011
Buscar texto en un Store Procedure (SP) de SQL
hay que cambiar el texto a buscar en la parte
set @PalabraABuscar = 'Texto a buscar'
Espero lo disfruten :)
------Comienza código --------
SET NOCOUNT ON
DECLARE @PalabraABuscar nvarchar(500)
DECLARE @Encontrado int
DECLARE @Nombre nvarchar(100)
DECLARE @Id int
CREATE TABLE #Tmp_Encontrados(
Nombre nvarchar(500) NULL,
pos int null)
set @PalabraABuscar = 'Texto a buscar'
DECLARE Cursor_Objeto CURSOR FOR
SELECT object_id,name FROM sys.objects WHERE type in (N'P', N'PC')
OPEN Cursor_Objeto;
FETCH NEXT FROM Cursor_Objeto
INTO @Id, @Nombre;
WHILE @@FETCH_STATUS = 0
BEGIN
set @Encontrado=0
SELECT @Encontrado= charindex(@PalabraABuscar,smsp.definition)
FROM
sys.all_objects AS sp
LEFT OUTER JOIN sys.database_principals AS ssp ON ssp.principal_id = ISNULL(sp.principal_id, (OBJECTPROPERTY(sp.object_id, 'OwnerId')))
LEFT OUTER JOIN sys.sql_modules AS smsp ON smsp.object_id = sp.object_id
LEFT OUTER JOIN sys.system_sql_modules AS ssmsp ON ssmsp.object_id = sp.object_id
LEFT OUTER JOIN sys.assembly_modules AS amsp ON amsp.object_id = sp.object_id
LEFT OUTER JOIN sys.assemblies AS asmblsp ON asmblsp.assembly_id = amsp.assembly_id
LEFT OUTER JOIN sys.procedures AS spp ON spp.object_id = sp.object_id
WHERE sp.name=@Nombre
IF @Encontrado > 0
BEGIN
INSERT INTO #Tmp_Encontrados VALUES(@Nombre,@Encontrado)
END
FETCH NEXT FROM Cursor_Objeto
INTO @Id, @Nombre;
END
CLOSE Cursor_Objeto;
DEALLOCATE Cursor_Objeto;
SET NOCOUNT OFF
SELECT * FROM #Tmp_Encontrados
DROP TABLE #Tmp_Encontrados
----Termina Código -------
viernes, 12 de marzo de 2010
Cambiar reslucion a una imagen en C#
public static byte[] imageToByteArray(string Ruta) { try { Image imageIn = Image.FromFile(Ruta); MemoryStream ms = new MemoryStream(); Bitmap bmPhoto = new Bitmap(imageIn); bmPhoto.SetResolution(100, 100); bmPhoto.Save(ms, imageIn.RawFormat); return ms.ToArray(); } catch { return new byte[0]; } }
Saber cual es la impresora por defecto c#
!-- code formatted by http://manoli.net/csharpformat/ -->
public static string GetImpresoraDefecto() { for (int i = 0; i < PrinterSettings.InstalledPrinters.Count; i++) { PrinterSettings a = new PrinterSettings(); a.PrinterName = PrinterSettings.InstalledPrinters[i].ToString(); if (a.IsDefaultPrinter) { return PrinterSettings.InstalledPrinters[i].ToString(); } } return ""; }desde Cristal Report se utiliza de la siguinte manera:
rpt.PrintOptions.PrinterName = GetImpresoraDefecto();
espacio de nombres:
using System.Drawing.Printing;
Exportar DataTable a Excel
public static void ExportarExcelDataTable(DataTable dt,string RutaExcel) { const string FIELDSEPARATOR = "\t"; const string ROWSEPARATOR = "\n"; StringBuilder output = new StringBuilder(); // Escribir encabezados foreach (DataColumn dc in dt.Columns) { output.Append(dc.ColumnName); output.Append(FIELDSEPARATOR); } output.Append(ROWSEPARATOR); foreach (DataRow item in dt.Rows) { foreach (object value in item.ItemArray) { output.Append(value.ToString().Replace('\n',' ').Replace('\r',' ').Replace('.',',')); output.Append(FIELDSEPARATOR); } // Escribir una línea de registro output.Append(ROWSEPARATOR); } // Valor de retorno // output.ToString(); StreamWriter sw = new StreamWriter(RutaExcel); sw.Write(output.ToString()); sw.Close(); }
miércoles, 2 de diciembre de 2009
Comprimir archivos en .NET (Zip o UnZip)
Link:
DotNetZip Library
lunes, 30 de noviembre de 2009
Eval en C#
http://weblogs.asp.net/datagridgirl/archive/2004/04/19/115900.aspx
public static string Eval(string Text) { //http://weblogs.asp.net/datagridgirl/archive/2004/04/19/115900.aspx Microsoft.JScript.Vsa.VsaEngine myEngine = Microsoft.JScript.Vsa.VsaEngine.CreateEngine(); return Microsoft.JScript.Eval.JScriptEvaluate(Text, myEngine).ToString(); ; }
Lo que hace la funcion es recibir un string y lo evalua devoliendo el resultado ejemplo Eval(“56+60”) devuleve 116
Espacio de nombres
Microsoft.JScript.Vsa.VsaEngine
Espero les sea de utilidad
martes, 30 de junio de 2009
Ocultar un Tab (TabPage) en C#
Asi que está es la forma como se oculta un Tab de un control Tab en C#:
if(chkimpresion.Cheked)
{
tabControl1.TabPages.Add(Impresion);//Impresión es el nombre que le dí al tab cuando lo cree. Y aquí lo muestro.
}
else
{
tabControl1.TabPages.Remove(Impresion);//Aquí se oculta.
}
Link
http://msdn.microsoft.com/es-es/library/system.windows.forms.tabpage(VS.80).aspx
Espero les sirva.
lunes, 8 de junio de 2009
Saber que usuario ingresa, borra o actualiza registros en sql (Auditoria en Sql SUSER_SNAME())
Yo lo hago con un trigger de la siguiente manera:
CREATE TRIGGER [NombreTrigger]
ON Tabla
after insert
AS
Insert Into TablaAuditoria(Campo1,Campo2,Campo3,Usuario,Fecha)
Select Campo1,Campo2,Campo3, SUSER_SNAME(),getdate()
From Tabla
Con este trigger logro tener un registro de quien ingreso un registro a mi tabla y a que horas
Espero les sea útil
viernes, 22 de mayo de 2009
Recibir o leer correos por c# .net mediante pop3
martes, 12 de mayo de 2009
Imprimir en la impresora por defecto un reporte de Crystal Report en C#
public void Imprimir()
{
string NombreImpresora = "";//Donde guardare el nombre de la impresora por defecto
//Busco la impresora por defecto
for (int i = 0; i < PrinterSettings.InstalledPrinters.Count; i++)
{
PrinterSettings a = new PrinterSettings();
a.PrinterName = PrinterSettings.InstalledPrinters[i].ToString();
if (a.IsDefaultPrinter)
{
NombreImpresora = PrinterSettings.InstalledPrinters[i].ToString();
}
}
rptReporte rpt = new rptReporte ();// Instancio el reporte
rpt.SetDataSource(Dt);//Asigno la fuente de datos a mi reporte.
rpt.PrintOptions.PrinterName =NombreImpresora; );//Asigno la impresora
rpt.PrintToPrinter(2, false, 0, 0); );//Imprimo 2 copias
}
Si necesitamos imprimir el reporte en una impresora especifica, simplemente asignamos el nombre de la impresora al reporte
rpt.PrintOptions.PrinterName =”ElNombreImpresora”;
Nombre de espacios utilizados
using System.Drawing.Printing;
lunes, 4 de mayo de 2009
Enviar email c# (outlook), con archivo adjunto
librerias
using System.Net;
using System.Net.Mail;
using System.Net.Mime;
class clsMail
{
public static bool Enviar()
{
//Ruta de archivo adjunto (Si lo lleva)
string PathFile = @"Z:\archivo.rar";
//Creo el mensaje del mail.
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
//Agrego los destinatarios, pueden ir varios
msg.To.Add("Paraquienvaelcorreo@empresa.com.co");
//Agrego la direccion del que manda el email, puede ser falsa o verdadera, pero si es falsa puede que el servidor de correo lo detecte como spam, tambien depende de las credenciales que se ponen mas abajo
msg.From = new MailAddress("jaas.jaas@gmail.com", "Jaas", System.Text.Encoding.UTF8);
//Pongo el asunto
msg.Subject = "Asunto" ;
//El tipo de codificacion del Asunto
msg.SubjectEncoding = System.Text.Encoding.UTF8;
//Escribo el mensaje Y su codificacion
msg.Body = "Mensaje del correo";
msg.BodyEncoding = System.Text.Encoding.UTF8;
//Especifico si va ha ser interpertado con HTML
msg.IsBodyHtml = false;
//Agrego el archivo que puse en la ruta anterior "PathFile", y su tipo.
Attachment Data = new Attachment(PathFile, MediaTypeNames.Application.Zip );
//Obtengo las propiedades del archivo.
ContentDisposition disposition = Data.ContentDisposition;
disposition.CreationDate = System.IO.File.GetCreationTime(PathFile);
disposition.ModificationDate = System.IO.File.GetLastWriteTime(PathFile);
disposition.ReadDate = System.IO.File.GetLastAccessTime(PathFile);
//Agrego el archivo al mensaje
msg.Attachments.Add(Data);
//Creo un objeto de tipo cliente de correo (Por donde se enviara el correo)
SmtpClient client = new SmtpClient();
//Si no voy a usar credenciales pongo false, Pero la mayoria de servidores exigen las credenciales para evitar el spam
//client.UseDefaultCredentials = false;
//Como voy a utilizar credenciales las pongo
client.Credentials = new System.Net.NetworkCredential("jaas.jaas@gmail.com", "Password");
//Si fuera gmail seria 587 el puerto, si es un servidor outlook casi siempre el puerto 25, yo utilizo un servidor propio de correo
//client.Port = 587;
client.Port = 25;
//identifico el cliente que voy a utilizar
client.Host = "Miservidor.com.co";
//Si fuera a utilizar gmail esto deberia ir en true, esto es un certificado de seguridad
//client.EnableSsl = true;
client.EnableSsl = false;
try
{
//Envio el mensaje
client.Send(msg);
return true;
}
catch (System.Net.Mail.SmtpException ex)
{
return false;
}
}
}
miércoles, 22 de abril de 2009
Guardar fecha sin hora SQL
GETDATE ()que nos devuelve la fecha y la hora o cuando nuestra aplicación envía la fecha con la hora, una forma de corregir esto es utilizar la función
CONVERTde esta forma
set dateformat dmy;
select CONVERT (datetime,CONVERT(VARCHAR,GETDATE(),101),101)
Esto lo que hace es convertir la fecha a un texto con un formato sin hora y después vuelvo y lo convierto a un dato de tipo fecha por si necesito realizar operaciones con este dato.
martes, 21 de abril de 2009
Crear una sola instancia de un formulario en c#
Este código me lo encontré en una página, no me acuerdo cual, y me ha sido muy útil, su función es permitir solo una instancia del formulario abierta. Entonces si ya tenemos abierto un formulario, y lo volvemos a tratar de abrir, el mostrara el primer formulario abierto, en ves de crear una nueva instancia.
Uso:
Este código se debe copiar en cada formulario, que se desee dotar de esta funcionalidad
Y se reemplaza
Formulariopor el nombre de la clase del formulario.
private static Formulario m_FormDefInstance; ////// Crea una instancia unica del Formulario /// ///Instancia por defecto public static Formulario DefInstance { get { if (m_FormDefInstance == null || m_FormDefInstance.IsDisposed) m_FormDefInstance = new Formulario (); return m_FormDefInstance; } set { m_FormDefInstance = value; } }
Para abrir el formulario se utiliza:
Formulario.DefInstance.Show();
lunes, 20 de abril de 2009
Redondeo por múltiplos(Excel, Sql)
REDONDEAR(N/m;0)*m.
Ejemplo :
MROUND(5,3)
Resultado:
6
Esto es una función que hace lo mismo pero en SQL:
Uso:
select dbo.RoundMult(5,3)
CREATE FUNCTION [dbo].[RoundMult] (@Valor numeric(18,2),@Multiplo Numeric(18,2))
RETURNS nvarchar(50)
WITH EXECUTE AS CALLER
AS
BEGIN
declare @Residuo numeric(18,0)
DECLARE @ValASumar numeric(18,0)
set @Residuo=@Valor%@Multiplo
IF @Residuo=0
BEGIN
return @Valor
END
ELSE
set @ValASumar= @Multiplo-@Residuo
return @Valor+@ValASumar
END
Formatear texto SQL (Poner letra inicial en mayuscula)
Uso:
Select [dbo].InitCap('TEXTO A FORMATEAR')
Resultado:
Texto A Formatear
CREATE FUNCTION [dbo].[InitCap] ( @InputString nvarchar(255) )
RETURNS NVARCHAR(255)
AS
BEGIN
DECLARE @Index INT
DECLARE @Char CHAR(1)
DECLARE @PrevChar CHAR(1)
DECLARE @OutputString NVARCHAR(255)
SET @OutputString = LOWER(@InputString)
SET @Index = 1
WHILE @Index <= LEN(@InputString) BEGIN SET @Char = SUBSTRING(@InputString, @Index, 1) SET @PrevChar = CASE WHEN @Index = 1 THEN ' ' ELSE SUBSTRING(@InputString, @Index - 1, 1) END IF @PrevChar IN (' ', ';', ':', '!', '?', ',', '.', '_', '-', '/', '&', '''', '(') BEGIN IF @PrevChar != '''' OR UPPER(@Char) != 'S' SET @OutputString = STUFF(@OutputString, @Index, 1, UPPER(@Char)) END SET @Index = @Index + 1 END RETURN @OutputString END
viernes, 17 de abril de 2009
Insertar imágenes dinámicamente en Cristal Report con C# 2005
Muchas veces tenemos que insertar imágenes ennuestros reportes dependiendo el registro que estemos mostrando, una forma queme a funcionado muy bien es la siguiente.
Cuando diseñemos el reporte debemos insertar un campo de tipo System.Byte[] en el DataTable utilizadopara el diseño de nuestro reporte, en este campo meteremos la imagen entiempo de ejecución.


Este campo se inserta en el reporte y será dondemostraremos la imagen.

Para mostrar el reporte utilizamos lo siguiente, para llenarel campo creado.
public void CargarReporte()
{
DataTable Dt = new
DataTable();//Creo un DataTable que sera la fuente de datos de mi reporte.
Dt=clsOrdenTerceros.Get_InfoParaOrdenImpresa(NumOrden);//Lleno el DataTable
rptOrdenSalidaTercero rpt = new rptOrdenSalidaTercero();// instancio el reporte
Dt.Columns.Add("Ruta11",System.Type.GetType("System.Byte[]"));//Agrego la columna con el tipo de dato "System.Byte[]",donde guardare mi imagen.
Dt.Rows[0]["Ruta11"] = CargarImagen("C:\foto.jpg"));//Cargo La imagen
rpt.SetDataSource(Dt);//Asigno la fuente de datos a mi reporte.
}
Y esta es la función que carga la imagen.
public static Byte[]CargarImagen(string rutaArchivo)
{
if (rutaArchivo != "")
{
try
{
FileStream Archivo = new FileStream(rutaArchivo, FileMode.Open);//Creo el archivo
BinaryReader binRead = new BinaryReader(Archivo);//Cargo el Archivo en modo binario
Byte[] imagenEnBytes = new Byte[(Int64)Archivo.Length]; //Creo un Array de Bytes donde guardare la imagen
binRead.Read(imagenEnBytes,0, (int)Archivo.Length);//Cargo la imagen en el array de Bytes
binRead.Close();
Archivo.Close();
return imagenEnBytes;//Devuelvo la imagen convertida en un array de bytes
}
catch
{
return new Byte[0];
}
}
return new byte[0];
}
Espacio de nombre Usados
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
lunes, 5 de enero de 2009
Eventos en Graficas (Chart) del producto DotNetCharting
Este código permite capturar eventos como el onMouse y el clic en los chart creados
con donetcharting, para poder interactuar con las graficas creadas.
private void chart1_MouseMove(object sender, MouseEventArgs e)
{
HitTestInfo hit = this.chart1.HitTest(); // Aqui se optiene el ultimo evento ejecutado en el chart
if (hit.Object is Element) //Miro si es un elemento (Una sección de la barra en el chart)
{
Element el = (Element)hit.Object; //Creo un elemento para poder acceder a las propiedades de ese elemento y poder tomar decisiones
int pos1 = 0;
//Acceso a las propiedades del elemento seccionado para tomar dediciones
pos1 = el.ToolTip.IndexOf("Orden Produccion");
string Cod = el.ToolTip.Substring(8, pos1 - 9);
Codigo del evento……
}
}
El evento principal de este codigo es
HitTestInfo hit = this.chart1.HitTest();Que es donde se registra todos los eventos en todas las partes del chart (Solo queda
el ultimo evento); Este se puede utilizar en cualquier evento del Chart
Espacios Utilizados
using dotnetCHARTING.WinForms;
jueves, 26 de junio de 2008
Leer y modificar un XML desde C# .NET
Este código muestra una forma fácil de leer y modificar un
archivo XML desde .NET , utilizando un DataSet.
Espacio de nombres “System.Data”
Archivo XML (Config.xml)
-----------------------------------------------------------
<?xml version="1.0" standalone="yes"?>
<config>
<asesor>
<cedula>123456</cedula>
<email>jaas.jaas@gmail.com</email>
</asesor>
</config>
Código:
using System.Data;
public static void LeerYModificarXML()
{
/*********Para leer un valor*********************/
DataSet ds = new DataSet();//Se crea un dataset
ds.ReadXml("Config.xml");//Dirección del archivo xml
string Valor = ds.Tables["asesor"].Rows[0]["cedula"].ToString(); //Leemos el primer valor (Rows[0])
/*******Para Guardar un valor*******************/
ds.Tables["asesor"].Rows[0]["cedula"] = Valor; // Modificar un valor
ds.WriteXml("Config.xml"); // Guardamos las modificaciones
}
Copiar hojas de Excel con macros (VBA)
Este código nos resulto muy útil, cuando teníamos que generar reportes en Excel con macros, nosotros generábamos el reporte y copiábamos las hojas en otro Excel para que el usuario trabajara con el
Sub CopiarHoja(Hoja As Integer)
Dim AppExceldestino As Object
Set AppExceldestino = New Excel.Application
AppExceldestino.Workbooks.Add
AppExceldestino.Workbooks(1).Activate
Dim i As Integer
Application.CutCopyMode = False
For i = 1 To Hoja
ActiveWorkbook.Sheets(i).Activate
AppExceldestino.Sheets(i).Select
ActiveWorkbook.ActiveSheet.Range("A1:A1").Select 'se para en la primera fila
ActiveWorkbook.ActiveSheet.Range("A1:U65").Select 'se selecciona el rango de la hoja a copiar
ActiveWorkbook.ActiveSheet.Application.CutCopyMode = False
Selection.Copy 'se copia el rango selecionado
'Abro el destino y pego su contenido
AppExceldestino.ActiveWorkbook.ActiveSheet.Cells(1, 1).Select 'Selecciono la primera linea del documento nuevo
AppExceldestino.ActiveWorkbook.ActiveSheet.Paste 'Lo pego
ActiveSheet.Select
Selection.Copy
AppExceldestino.ActiveSheet.Paste
AppExceldestino.Visible = True
Next
AppExceldestino.Sheets(3).Delete
AppExceldestino.Sheets(1).Activate
AppExceldestino.ActiveWorkbook.SaveAs Filename:="Ruta", FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False 'Se guarda el archivo con el nombre "Ruta"
AppExceldestino.Workbooks.Close ' Se cierra
ActiveWorkbook.Sheets(1).ActivateActiveWorkbook.Activate
End Sub
martes, 24 de junio de 2008
crear citas en el Outlook desde C#
Esta es una función para crear citas en el Outlook desde C#.
para utilizar esta funcion se debe referenciar el espacio de nombre, Tambien se debe agregar a las referencias el objeto COM "Microsoft OutLook 11.0 Object Library"
using Outlook = Microsoft.Office.Interop.Outlook;
public static void CrearCita(string Asunto, string Comentario, string Ubicacion, DateTime FechaIni, DateTime FechaFin, int Aviso)
{
Outlook.Application outlookApp = (Outlook.Application)new Outlook.Application(); //Crea un objeto de OutLook Outlook.AppointmentItem Cita; //Instanciamos Un objeto de tipo Cita(AppointmentItem)
Cita = (Outlook.AppointmentItem)outlookApp.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olAppointmentItem); Cita.Subject = Asunto;
Cita.Body = Comentario;
Cita.Location = Ubicacion;
Cita.Start = FechaIni;
Cita.End = FechaFin;
Cita.ReminderSet = true; //Para que saque el avisito de recordar cita
Cita.ReminderMinutesBeforeStart = Aviso; //El Tiempo antes de la cita que se recordará (Minutos)
Cita.BusyStatus = Microsoft.Office.Interop.Outlook.OlBusyStatus.olBusy; //Para que en el calendario salga el estado de ocupado
Cita.Save(); //Para guardar la cita
}