Weblogs Código

RecorteX

» csharp
73 usuarios y 244 recortes de código
Usuario

Contraseña
Crear cuenta
Estás viendo los recortes de la etiqueta csharp

RSS
Recortes: 26

Etiquetas relacionadas:
vbnet
xml
splash
charp
win32
multithreading
sql
Explorer
net
Ajax
threading
hilos
registro
aspnet
Javascript
service
c
web
js

Traer un DT desde un query en SqlServer

 
    Private Function getDT(ByVal qry As String, ByVal connectionString as string) As DataTable
        Dim dataSet As DataSet = New DataSet
        Dim conn As New SqlConnection(connectionString)
        Dim cmdString As String = qry
        Dim dataAdapter As New SqlDataAdapter(cmdString, conn)
        Dim ds As New DataSet()
        dataAdapter.Fill(ds, "dt")
 
        Return ds.Tables("dt")
    End Function
 
 
    private DataTable getDT(String qry, String  connectionString)
    {
        DataSet dataSet = new DataSet();
        SqlConnection conn = new SqlConnection(connectionString);
        SqlDataAdapter dataAdapter = new SqlDataAdapter(qry, conn);
        DataSet ds= new DataSet();
        dataAdapter.Fill(ds, "dt");
  
        return ds.Tables ["dt"];
    }
 

Leer y escribir archivos de texto

En Vb.net

 
    Private Sub WriteFile(ByVal FileName As String, ByVal data As String)
        If File.Exists(FileName) Then File.Delete(FileName)
        Dim swFile As StreamWriter = File.CreateText(FileName)
        swFile.Write(data)
        swFile.Flush()
        swFile.Close()
    End Sub
 
    Private Function ReadFile(ByVal FileName As String) As String
        Dim ret As String = ""
        If File.Exists(FileName) Then
            Dim TheFile As System.IO.StreamReader = New StreamReader(FileName, System.Text.Encoding.Default)
            ret = TheFile.ReadToEnd()
            TheFile.Close()
        End If
        Return ret
    End Function
 

En c#

 
        public static void WriteFile(String FileName , String data ){
            if (File.Exists(FileName)) {File.Delete(FileName);}
            StreamWriter swFile   = File.CreateText(FileName);
            swFile.Write(data);
            swFile.Flush();
            swFile.Close();
        }
 
        public static String ReadFile(String FileName ) {
            String ret  = "";
            if (File.Exists(FileName)){
                 System.IO.StreamReader TheFile = new System.IO.StreamReader(FileName, System.Text.Encoding.Default);
                 ret = TheFile.ReadToEnd();
                 TheFile.Close();
            }
            return ret;
        }
 

Leer recursos de la aplicación

 
Imports System.IO
Imports System.Reflection
 
 
    Private Function ReadStringResource(ByVal resource As String) As String
        Dim asm As Assembly = Assembly.GetExecutingAssembly()
        Dim stream As Stream = asm.GetManifestResourceStream(resource)
        Dim streamReader As StreamReader = New StreamReader(stream)
        Dim ret As String = streamReader.ReadToEnd
        Return ret
    End Function
 
 
        private String ReadStringResource(String resource) {
            Assembly asm = Assembly.GetExecutingAssembly();
            Stream stream = asm.GetManifestResourceStream(resource);
            StreamReader streamReader = new StreamReader(stream);
            String ret = streamReader.ReadToEnd();
            return ret;
        }
 

Transformacion en memoria XSL

Con este código, para la transformación solo necesitamos llamarla mandándole un string con el contenido, otro string con el contenido del xsl y “Me.GetType().Assembly.Evidence” y regresará un string con el contenido de la transformación.

 
    Public Function ApplyXMLTransform(ByVal xslSDoc As String, ByVal xmlSDoc As String, ByVal evidence As System.Security.Policy.Evidence) As string
        Dim xmlDoc As XmlTextReader = New XmlTextReader(New StringReader(xmlSDoc))
        Dim xslDoc As XmlTextReader = New XmlTextReader(New StringReader(xslSDoc))
        Dim res As New Xml.XmlDocument
        Dim xslt As New Xml.Xsl.XslTransform
        xslt.Load(xslDoc, Nothing, evidence)
        res.Load(xslt.Transform(New Xml.XPath.XPathDocument(xmlDoc), Nothing, New Xml.XmlUrlResolver))
        Return res.OuterText
    End Function
 
 
        public string ApplyXMLTransform(string xslSDoc, string xmlSDoc , System.Security.Policy.Evidence evidence) 
        {
            XmlTextReader xmlDoc = new XmlTextReader(new StringReader(xmlSDoc));
            XmlTextReader xslDoc = new XmlTextReader(new StringReader(xslSDoc));
            XmlDocument res = new XmlDocument();
            XslTransform xslt = new XslTransform();
            xslt.Load(xslDoc, null, evidence);
            res.Load(xslt.Transform(new XPathDocument(xmlDoc), null, new XmlUrlResolver()));
            return res.OuterXml;
        }
 
        public string ApplyXMLTransform(string xslSDoc, string xmlSDoc)
        {
            return this.ApplyXMLTransform (xslSDoc, xmlSDoc, this.GetType().Assembly.Evidence); 
        }
 

Multithreading en C#

Este es un layout rapido para poder usar multithreading en C#
 
using System;
using System.Threading;
 
namespace CSharpSchool
{
  class Test
  {
    static void Main()
    {
      Thread firstThread = new Thread(new ThreadStart(fun1));
      Thread fsecondThread = new Thread(new ThreadStart(fun2));
      
      firstThread.Start();
      secondThread.Start();
 
      console.WriteLine("End of Main()");
    }
    
    public static void Fun1()
    {
      for (int i=1; i<=5; i++)
      {
        Console.WriteLine("Fun1() writes: {0}", i);
      }
    }
    public static void Fun2()
    {
      for (int i=1; i<=6; i++)
      {
        Console.WriteLine("Fun2() writes: {0}", i);
      }
    }
  }
}
 

C#, Registro y booleanos

No se si os habrá pasado alguna vez. Al intentar leer un valor lógico del registro con C# me dice sencillamente, que me busque la vida.
Así que, hago esto que es igual de rápido y así de fácil:

valor_logico = ((int)clave.GetValue (nombreCadena)) == 1;
Para leer los datos del registro. Suponiendo que clave es un RegistryKey ya abierto. Y:

clave.SetValue (nombreCadena, valor_logico ? 1 : 0, RegistryValueKind.DWord);
para escribirlo.

No es muy complicado ¿ verdad ?

Splash con operación larga en inicio

Si al arrancar tu aplicación tienes que hacer una operación que puede tardar varios minutos puede llegar a desesperar al usuario.
Para eso se supone que se inventaron las ventanas de splash. Sin embargo, si en esa ventana de splash quieres poner una imagen animada, una barra de progreso o cualquier otra cosa para demostrar al usuario que no se le ha colgado la aplicación hay que dar un pequeño rodeo. Al menos es la mejor forma que he encontrado. De cualquier otra forma, mostraremos un bonito rectángulo gris que no dará demasiada buena imagen de lo que hemos hecho.

Primero creo una clase que encapsulará el trabajo con la ventana de splash.

public class GestionVentana
{
   Progreso progreso;
   InvConf.Configuracion conf;

   public GestionVentana (ref InvConf.Configuracion conf, ref Progreso progreso)
   {
      this.conf = conf;
      this.progreso = progreso;
   }

   public void bw_RunWorkerCompleted (object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
   {
      this.progreso.Hide ();
   }

   public void bw_DoWork (object sender, System.ComponentModel.DoWorkEventArgs e)
   {
      // Esta es la función que tarda varios minutos
      this.conf.procesarEquipo ();
   }
}
Y después en el método principal debemos insertar algo como esto:

System.ComponentModel.BackgroundWorker bw = new System.ComponentModel.BackgroundWorker ();

GestionVentana gv = new GestionVentana (ref conf, ref progreso);
bw.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler
   (gv.bw_RunWorkerCompleted);
bw.DoWork += new System.ComponentModel.DoWorkEventHandler (gv.bw_DoWork);
bw.RunWorkerAsync ();

while (bw.IsBusy)
{
   // O cualquier otra actualización en la interfaz que queramos realizar.
   Application.DoEvents ();
}

Crear mensaje

Manda un mensaje de alert de js, desde csharp en una webapp

 
		public static void ShowMessage(System.Web.UI.Page p, string message) 
		{			
			message = message.Replace("'", @"\'");
			message = message.Replace("\"", @"\" + '"');			
			//MessageBox Script
			String scriptString = "<script language=JavaScript>";
			scriptString += "alert('" + message + "');";
			scriptString += "</script>";
			ClientScript.RegisterStartupScript(this.GetType(), "ShowMessage", scriptString);			
		}
 

Obtiene el valor de un atributo que se encuentra en el Request de la pagina.

Obtiene el valor de un atributo que se encuentra en el Request de la pagina.

 
	/// <summary>
	/// Obtiene el valor de un atributo que se encuentra en el Request de la pagina. 
	/// Si no se encuentra el atributo regresa una cadena vacia.
	/// </summary>
	/// <param name="Request">Objeto Request de la pagina.</param>
	/// <param name="attributeName">Nombre del atributo del cual se desea obtener su valor.</param>
	/// <returns>Regresa el valor del atributo, en caso de no existir retorna una cadena vacia.</returns>
	public static string getAttribute(System.Web.HttpRequest Request, string attributeName)
	{
		string attributeValue="";
		try
		{
			attributeValue = Request.QueryString[attributeName];
			if(attributeValue==null || attributeValue.Trim().Equals("")==true)
				attributeValue = "";
		}
		catch{}
		return attributeValue;
	}
 
 
	''' <summary>
	''' Obtiene el valor de un atributo que se encuentra en el Request de la pagina. 
	''' Si no se encuentra el atributo regresa una cadena vacia.
	''' </summary>
	''' <param name="Request">Objeto Request de la pagina.</param>
	''' <param name="attributeName">Nombre del atributo del cual se desea obtener su valor.</param>
	''' <returns>Regresa el valor del atributo, en caso de no existir retorna una cadena vacia.</returns>
	Shared Function getAttribute(Request As System.Web.HttpRequest, attributeName As String) As String 
		Dim attributeValue As String = "" 
		Try  
			attributeValue = Request.QueryString(attributeName)  
			If attributeValue Is Nothing OrElse attributeValue.Trim().Equals("") = True Then  
 				attributeValue = ""  
			End If 
		Catch 
		End Try 
		Return attributeValue
	End Function
 

Exportar a Excel

Exportar a Excel desde web

En c#

 
  		public static void DT2xls(System.Web.HttpResponse Response,  DataTable dt)
		{
			// exportar a xls
			Response.Clear();
			Response.Buffer= true;
			Response.AddHeader("Content-Disposition", "attachment; filename=Export.xls");
			Response.ContentType = "application/vnd.ms-excel";
			System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
			System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
			System.Web.UI.WebControls.DataGrid dg = new System.Web.UI.WebControls.DataGrid();
			dg.DataSource = dt;
			dg.DataBind();
			dg.RenderControl(oHtmlTextWriter);
			Response.Write(oStringWriter);
			Response.End();
		}
 

En Vb.net

 
        Response.Clear()
        Response.Buffer = True
        Response.AddHeader("Content-Disposition", "attachment; filename=Export.xls")
        Response.ContentType = "application/vnd.ms-excel"
        Dim oStringWriter As System.IO.StringWriter = New System.IO.StringWriter
        Dim oHtmlTextWriter As System.Web.UI.HtmlTextWriter = New System.Web.UI.HtmlTextWriter(oStringWriter)
        Dim dg As System.Web.UI.WebControls.DataGrid = New System.Web.UI.WebControls.DataGrid
        dg.DataSource = dt
        dg.DataBind()
        dg.RenderControl(oHtmlTextWriter)
        Response.Write(oStringWriter)
        Response.End()
 

Exportar a Excel desde consola

 
    Public Sub htmlExport()
        Dim gvEx As New System.Web.UI.WebControls.GridView
        gvEx.AutoGenerateColumns = True
        gvEx.AllowSorting = False
        gvEx.AllowPaging = False
        Dim stringWrite As New System.IO.StringWriter
        Dim htmlWrite As New System.Web.UI.HtmlTextWriter(stringWrite)
        gvEx.DataSource = Me.DataSource
        gvEx.DataBind()
        gvEx.RenderControl(htmlWrite)
        WriteFile(Me.FileName, stringWrite.ToString())
    End Sub
 

Usando excel

 
    Public Sub ExcelExport()
        Dim oexcel As Excel.Application
        Try
            If File.Exists(FileName) Then File.Delete(FileName)
            'create new excel application
            oexcel = CreateObject("Excel.Application")
            oexcel.Application.DisplayAlerts = True
            'add a new workbook
            'obook = oexcel.Workbooks.Open(FileName)
            Dim obook As Excel.Workbook = oexcel.Workbooks.Add()
            Dim ws As Excel.Worksheet = obook.Sheets(1)
 
            ' Add each row of data to the sheet.
            ' The sheet cell row is incremented by one because the first row was used for the header.
            For rowIndex As Integer = 1 To DataSource.Rows.Count
                For colIndex As Integer = 1 To DataSource.Columns.Count
                    TryCast(ws.Cells(rowIndex + 1, colIndex), Excel.Range).Value2 = DataSource.Rows(rowIndex - 1)(colIndex - 1).ToString()
                Next
            Next
 
            ' Create the headers on the sheet.
            For colIndex As Integer = 1 To DataSource.Columns.Count
                TryCast(ws.Cells(1, colIndex), Excel.Range).Value2 = DataSource.Columns(colIndex - 1).ColumnName
                TryCast(ws.Cells(1, colIndex), Excel.Range).Font.Bold = True
                TryCast(ws.Cells(1, colIndex), Excel.Range).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter
                TryCast(ws.Cells(1, colIndex), Excel.Range).EntireColumn.AutoFit()
            Next
 
 
            oexcel.Visible = False
 
            If Password <> "" Then
                obook.SaveAs(FileName, Excel.XlFileFormat.xlWorkbookNormal, Password, Nothing, False, False, Excel.XlSaveAsAccessMode.xlExclusive, False, False, Nothing, Nothing)
            Else
                obook.SaveAs(FileName)
            End If
            'end application object and session
            obook.Close()
            obook = Nothing
            oexcel.Quit()
            oexcel = Nothing
        Catch ex As Exception
            Throw New System.Exception(ex.Message)
        Finally
        End Try
    End Sub
 
Proyecto: Juanjo Navarro, 2006 - Diseño: Albin