Archivo de la categoría: .Net

Forzar descarga de un archivo

Esto es para forzar la descarga de un pdf puede ser util para imagenes y/o otras cosas que los navegadores por defecto abren.

Colocar en el page_load:

Response.ClearHeaders();
Response.ClearContent();
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment; filename=mifactura.pdf");
Response.WriteFile(@"C:\choco\test.pdf");
Response.End();

Esto va a hacer que el navegador pregunto donde guardar el archivo que esta en el servidor C:\choco\test.pdf con el nombre mifactura.pdf

El aspnet_wp.exe no se puede iniciar

Cuando sale este error en el visor de eventos de windows:

aspnet_wp.exe could not be started. HRESULT for the failure: 80070545

En el directorio:

%WINDIR%\Microsoft.NET\Framework\v1.0.3705\CONFIG

Buscar el archivo, machine.config, y en la seccion processModel cambiar el tag de userName de machine a system. O crear un usuario dentro del panel de control y agregar alli el usuario y el password, en userName y en password respectivamente

Error No se pudo cargar viewstate

No se pudo cargar viewstate. El árbol de control en que se está cargando viewstate debe coincidir con el árbol de control que se utilizó para guardar viewstate durante la solicitud anterior. Por ejemplo, al agregar controles de forma dinámica, los controles agregados durante una devolución deben coincidir con el tipo y posición de los controles agregados durante la solicitud inicial.

Se soluciona agregando: EnableViewState=»false»  al tag Page de la vista de codigo de la pagina aspx.

Recuperar el id del ultimo registro insertado

Algo muy comun es querer saber el id del ultimo registro insertado, aca posteo un ejemplo de como hacer eso para una base de datos SQL Server en c#:

SqlConnection conn= new SqlConnection(
ConfigurationManager.ConnectionStrings["dbConn"].ConnectionString
);
string insertStr =
"INSERT INTO [tabla]([texto],[fecha]) VALUES(@texto,getDate())
;SELECT  Scope_Identity();";
SqlCommand cmd=new SqlCommand(insertStr,conn);
cmd.Parameters.Add("@texto", SqlDbType.NVarChar).Value="El texto va aca";
cmd.Connection.Open();
string ret=cmd.ExecuteScalar().ToString();
cmd.Connection.Close();

La parte clave esta en la sentencia Select Scope_Identity() del sql.

Equivalente de limit de mysql dentro del .net

No llegue a encontrar un equivalente directo del limit dentro de otra base de datos que no sea Mysql, pero el framework .net da la siguiente posibilidad para emular esa funcionalidad:

SqlDataSource sds = new SqlDataSource(
utils.getWebConfigConn("dbConnectionString"), 
"selec * from vendedores"
);
DataSourceSelectArguments sa = new DataSourceSelectArguments(10, 20);
DataView dv = (DataView)sds.Select(DataSourceSelectArguments .Empty);

Lo anterior traera las filas comenzando por la 11 y terminando en la 30 (como hace el limit del mysql) dentro del dataset que esta en dv.Table

Cambiar el navegador por defecto en .Net

Al instalar una máquina lo primero que hay que hacer es instalar el Firefox y ponerlo como navegador como defecto de windows, pero si luego instalamos el .Net pasa que agarra el Firefox como navegador y suele ser molesto porque el IDE no detecta cuando cerramos la pagina, por lo que es recomendable el IE. (articulo original)

Click derecho en cualquier pagina del proyecto

debugging1.jpg

Click en Add si se quiere agregar un navegador a la lista

debugging2.jpg

Elegir cual se quiere setear como navegador predeterminado

debugging3.jpg

Recorrer un hashtable con foreach en c#

Aca un ejemplo de como iterar dentro de un hashtable y crear un xmlDocument de paso:

 
protected void Page_Load(object sender, EventArgs e)
{
	Hashtable xx = new Hashtable();
	xx.Add("key1", "valor1");
	xx.Add("key2", "valor2");
	xx.Add("key3", "valor3");
	xx.Add("key4", "valor4");
	XmlDocument xd = documentInfoXML("Nombre", "Descriptor", "items", xx);
	Response.Write(xd.OuterXml);
}
public static XmlDataDocument documentInfoXML(string xmlDocumentNombre,
 string xmlDocumentDescriptor, string itemName, Hashtable keysValues)
{
	XmlDataDocument xdd = new XmlDataDocument();
	XmlNode xn = xdd.CreateNode(XmlNodeType.Element, xmlDocumentNombre, "NameSpace");
	XmlAttribute xa = xdd.CreateAttribute("Descripcion");
	xa.Value = xmlDocumentDescriptor;
	xn.Attributes.Append(xa);
	xdd.AppendChild(xn);
	foreach (DictionaryEntry item in keysValues)
	{
		XmlElement nodo = xdd.CreateElement(item.Key.ToString());
		XmlText valor=xdd.CreateTextNode( item.Value.ToString());
		xdd.DocumentElement.AppendChild(nodo);
		xdd.DocumentElement.LastChild.AppendChild(valor);
	}
	return xdd;
}

La parte propiamente teniendo en cuenta el titulo es la parte del foreach, un hashtable tiene DictionaryEntry como items, tanto el key como el value son objetos.
Despues en el resto del ejemplo creo un XmlDocument con el contenido del hashtable