lunes, 13 de diciembre de 2010
SqlServerCe no insert desde c#
Si tenes problemas insertando datos o que los datos se insertan, pero al cerrar la conexion no se salvan, podes solucionarlo poniendo en la conexion a la base un path absoluto.No es la mejor solucion, pero funciona.
Etiquetas:
SqlServeCe insercion datos error
martes, 28 de septiembre de 2010
Enviar mails de forma simple con .net
Es necesario poner el namepace
using System.Net.Mail;
Luego es muy simple la manera de enviar el correo:
MailMessage mm = new MailMessage(direccionDesde, destinatario);
mm.Subject = motivo;
mm.Body = cuerpoMail;
mm.IsBodyHtml = false;
SmtpClient smtp=new SmtpClient();
smtp.Send(mm);
Etiquetas:
enviar correo c#,
send mail .net
viernes, 6 de agosto de 2010
Para poder cambiar el tamaño de la imagen, primero creo una nueva al tamaño al que queremos hacerlo (en este caso 100 pixels por 100 pixels), luego creando el objeto Graphics a partir de la imagen anterior, y "escribiendo" a la imagen nueva la imagen resizeada.
Bitmap imagenNueva = new Bitmap( 100, 100 );
using( Graphics g = Graphics.FromImage( (Image) imagenVieja ) )g.DrawImage( imagenNueva, 0, 0, 100, 100 );
Etiquetas:
image resize,
image resizing c#
martes, 3 de agosto de 2010
Detectar emails con Expresiones regulares en C#
La forma de detectar varios emails con expresiones regulares es una tarea facil, una vez que se sabe que patron usar.
Una vez corrido el proceso, se generan los terminos encontrados, que pueden ser recorridos uno por uno con un for each.
List output = new List();
string pattern = @"(([^<>()[\]\\.,;:\s@\""]+"
+ @"(\.[^<>()[\]\\.,;:\s@\""]+)*)|(\"".+\""))@"
+ @"((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"
+ @"\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+"
+ @"[a-zA-Z]{2,}))";
Regex emailregex = new Regex(pattern);
MatchCollection matches = emailregex.Matches(source);
foreach (Match item in matches)
{
if (item.Success)
{
if(!output.Contains(item.Value.ToLower()))
output.Add(item.Value.ToLower());
}
}
Etiquetas:
c# regexp email
viernes, 11 de junio de 2010
Crear Objetos dinamicamente
Hay dos formas de crear de forma dinámica un objeto "on the fly".
Estas formas de implementar patterns de "factory" usan siempre reflection de .net.
Incluir:
using System.Reflection;
Lo esencial quizas es que todos los objetos que creemos tengan una clase Base comun, para poder asignarselos y luego poder castearlos a la clase que queremos.
Type tipoObjeto = typeof(ClaseaInstanciar)
ClaseBase c = (ClaseBase)Assembly.GetExecutingAssembly().CreateInstance(tipoObjeto.FullName);
Otra forma es (aparentemente mas lenta):
string strClase = "NombreDeClaseACrear";
Type tipoClase = Type.GetType(strClase);
ClaseBase c = (ClaseBase) t.InvokeMember("ctor", BindingFlags.CreateInstance, null, null, null);
---------------------------------------
Ejemplo Concreto:
class Persona
{
string nombre="";
}
class Trabajador : Persona
{
string IDTrabajador = "";
}
private void llamada()
{
Type tipoObjeto = typeof(Trabajador);
Persona c = (Persona)Assembly.GetExecutingAssembly().CreateInstance(tipoObjeto.FullName);
}
Etiquetas:
c#,
factory,
reflection
viernes, 4 de junio de 2010
Obtener la tangente en grados en .net
El angulo que devuelven las funciones trigonometricas de .net es en radianes, por lo cual hay que transformar esto a grados si es eso lo que se desea.
La forma es asi:
double phi = 0; //angulo en radianes;
phi = Math.Atan2(y , x);
angulo = phi * (180.0 / Math.PI);
Etiquetas:
trigonometria tangente c#
viernes, 14 de mayo de 2010
Borrar multiples archivos en c#
Para borrar muchos archivos con el uso de comodines (por ejemplo *) se debe seleccionar primero en ese directorio todos los que cumplan con esa condición y luego recorrerlos borrándolos uno por uno.
No existen comodines en el metodo Delete para borrar archivos.
dim path as string ="C:\"
For Each archivo As String In Directory.GetFiles(path, "out*.tmp") File.Delete(archivo)
Next
Etiquetas:
borrar archivos en .net,
delete multiple files
Disparar un beep en .net
Actualmente se puede desde .net (vb.net o c#) reproducir facilmente un beep, ya sea desde una aplicación de consola o de forms.
En el namespace de sistema System.Media podemos encontrar La clase SystemSounds que nos deja acceder a este tipo de recursos de sonido, la forma es la siguiente:
System.Media.SystemSounds.Beep.Play();
Tambien se puede acceder a otros sonidos del sistema como de errores o información, etc.
Etiquetas:
beep en c#,
beep en vb.net,
sonidos del sistema
martes, 13 de abril de 2010
Ajax no anda en chrome o safari
Visual Studio parece generar siempre paginas que andan en internet explorer, pero que tienen varios(o muchos) problemas en otros browsers.
<ajax:toolkitscriptmanager id="scripts" runat="server" scriptmode="Release" enablehistory="true" EnableSecureHistoryState="false" EnablePageMethods="True" CombineScripts="true" >
Es el caso de Google Chrome por ejemplo. En .net 3.5 con los controles del ajaxControlToolkit tengo problemas de carga de extenders, scripts que no se cargan, asi que encontre esta solución.
En vez de usar el viejo ScriptManager se usa el nuevo que viene con el AjaxControlToolkit: ToolkitScriptManager
Por ejemplo asi:
<ajax:toolkitscriptmanager id="scripts" runat="server" scriptmode="Release" enablehistory="true" EnableSecureHistoryState="false" EnablePageMethods="True" CombineScripts="true" >
<Scripts>
<asp:ScriptReference Path="~/chrome.js" />
</Scripts>
</ajax:ToolkitScriptManager>
crear un archivo chrome.js y llenarlo con:
Sys.Browser.WebKit = {}; //Safari 3 is considered WebKit
if (navigator.userAgent.indexOf('WebKit/') > -1) {
Sys.Browser.agent = Sys.Browser.WebKit;
Sys.Browser.version = parseFloat(navigator.userAgent.match(/WebKit\/(\d+(\.\d+)?)/)[1]);
Sys.Browser.name = 'WebKit';
}
Etiquetas:
ajax problem with chrome,
ajax.net error con chrome
Visual Studio 2008 no reconoce las paginas aspx
Puede que Visual Studio 2008 deje de reconocer las paginas aspx (markups, formatos, sintaxis t coloreo) y otro tipo de paginas tambien. Ocurre de un dia para el otro y no hay forma de desinstalar e instalar y que funcione.
Para esto encontre una solucion muy simple, hay que abrir el "Visual Studio 2008 command prompt" y correr lo siguiente:
devenv.exe /ResetSkipPkgs
Esto resetea parametros del entorno y todo comienza a andar normalmente desde ese momento (al menos hasta ahora...)
lunes, 12 de abril de 2010
Reproducir sonidos o wav en .net
En C# o vb.net es muy simple reproducir sonidos gracias a la inclusion del sound player, una vez definido se le especifica que sonido tiene que cargar (con el nombre de archivo en disco) y luego simplemente dandole "Play" lo reproduce:
System.Media.SoundPlayer player = new System.Media.SoundPlayer();
player.SoundLocation = @"c:\sonidos\sonido.wav";
player.Play();
Etiquetas:
play sound wav c#,
reproducir sonido en c#
definir cosas que se ejecutan solo en debug en C#
Cuando uno quiere que ciertas cosas se ejecuten o se vean cuando se debugea, o al reves, cuando se ejecuta en release, tiene que usar directivas de preprocesador, definiendo variables. Hay una que ya esta definida por default, esta es DEBUG (está en true en modo debug, false en release).
Entonces podemos hacer esto:
#if DEBUG
Console.WriteLine("Estoy en debug");
Control1.Visible=true;
#else
Console.WriteLine("Estoy en Release");
Control1.Visible=false;
#endif
Etiquetas:
ejecutar en debug,
modo debug preprocesadores
domingo, 11 de abril de 2010
Ocultar y mostrar cursor o puntero del mouse c#
Para ocultar el puntero del ratón se debe llamar al objeto Cursor, este tiene varios metodos pero el que vamos a usar es el hide, asi:
Cursor.Hide();
Si deseamos hacer aparecer o mostrar el mouse nuevamente, haremos:
Cursor.Show();
Etiquetas:
desaparecer puntero del ratón,
mostrar mouse
domingo, 28 de marzo de 2010
DoEvents en C#
El equivalente a DoEvents del viejo vb6 es el mismo en c#, pero escondido, es decir, no es una función global, lo accederemos asi:
Application.DoEvents();
Application.DoEvents();
Si tenes que acceder desde una clase, debes poner esto:
System.Windows.Forms.Application.DoEvents();
Etiquetas:
desbloquear aplicacion,
Doevents en c#,
idle function
lunes, 22 de marzo de 2010
Javascript: Como llamar una funcion con una string
Si queremos llamar a una función de javascript contando con una cadena de texto, pasandole parámetros, etc, lo que tenemos que hacer es "evaluar" esa expresión. Esto nos permitirá correr cualquier pedazo de código que querramos en tiempo de ejecución (por ejemplo código dinámico).
Esto tiene el problema que no se compila, ni sabremos de sus errores hasta el momento que lo corramos.
Ejemplo:
Esto tiene el problema que no se compila, ni sabremos de sus errores hasta el momento que lo corramos.
Ejemplo:
Aqui se puede observar que llamamos a nombreFuncion con 3 parametros, dos de ellos estáticos y uno dinámico. El primero un boolena "true", el segundo es el parámetro dinámico, y el tercero es un número.
Por último, si esta función devuelve valor, lo hará en la variable "ret"
Por último, si esta función devuelve valor, lo hará en la variable "ret"
Etiquetas:
correr string,
evaluar función,
javascript,
llamar función,
run string in runtime
martes, 16 de marzo de 2010
Codificar url o texto online
Desde esta dirección se baja una página html que codifica o decodifica rápidamente el texto que queremos tratar:
http://sites.google.com/site/netzreport2/online_tool_for_url_en_decoding.html
Casi abajo de todo hay una caja de texto que dice "URL decoded text", ingresamos nuestro texto, y debajo hacemos click en Encode si deseamos codificar nuestra cadena o Decode si deseamos decodificarla.
Etiquetas:
decode url,
encode online string,
url encode
Codificar datos complejos para pasarlos por url
Si queremos codificar (u encodear) una cadena (string) o url para pasarla como parámetro de otra url, a través de un navegador hacia el servidor, tenemos que hacer lo siguiente:
Dim url As String
url = "http://www.abc.com/pagina.aspx?direccion=" & Server.UrlEncode("pepe.aspx?eee=1")
Dim url As String
url = "http://www.abc.com/pagina.aspx?direccion=" & Server.UrlEncode("pepe.aspx?eee=1")
Este ejemplo nos permite ver como se puede codificar una dirección a otra página, pasarla por un parámetro y que la reciba una página en el servidor para poder redireccionar (con response.Redirect por ejemplo) el navegador hacia allí.
Etiquetas:
codificar cadena,
codificar string,
codificar url,
pasar datos por url,
url encode
jueves, 4 de marzo de 2010
Reemplazar sin importar el casing o si es mayuscula o minuscula
Por alguna razon estas funciones no estan en la clase string como deberian. Pero, de todas formas estan en algun lugar del framework, esto es la clase "Strings" de .net.
Si utilizamos la funcion replace de ahi tendremos que pasar primero la string con la cual queremos trabajar, luego lo que queremos encontrar, y como tercero que es lo que queremos poner. Hay dos parámetros que indican desde que indice hasta cuanta cantidad de caracteres considerará el replace.
Por último, y lo mas importante, es el parámetro que indica que esto es texto, es decir, no le hace caso a mayusculas/minusculas.
Ejemplo:
dim strDestino as string = Strings.Replace(strOrigen, strQueReemplazar, strPorQueReemplazarlo, 0, , CompareMethod.Text)
Si utilizamos la funcion replace de ahi tendremos que pasar primero la string con la cual queremos trabajar, luego lo que queremos encontrar, y como tercero que es lo que queremos poner. Hay dos parámetros que indican desde que indice hasta cuanta cantidad de caracteres considerará el replace.
Por último, y lo mas importante, es el parámetro que indica que esto es texto, es decir, no le hace caso a mayusculas/minusculas.
Ejemplo:
dim strDestino as string = Strings.Replace(strOrigen, strQueReemplazar, strPorQueReemplazarlo, 0, , CompareMethod.Text)
Etiquetas:
c#,
case insensitive,
casing,
mayusculas,
minusculas,
reemplazar,
vb.net
miércoles, 3 de marzo de 2010
El tipo o espacio de nombre profilecommon no se encuentra
Este error sucede muchas veces cuando se borro accidentalmente o se cambio el web.config. Es decir, no se declaro la sección que define el profilecommon.
Me he encontrado con esto las veces que hago una migración o cambio una pagina a otro proyecto, o hago uno nuevo sin copiar los archivos necesarios.
Esto es fácil de solucionar, solo agregando la sección del web.config que falta, es decir la "profile" debajo de "system.web".
Puede hacerse de la siguiente manera:
<profile>
<properties>
<add name="email">
<add name="direccion">
</properties>
</profile>
Me he encontrado con esto las veces que hago una migración o cambio una pagina a otro proyecto, o hago uno nuevo sin copiar los archivos necesarios.
Esto es fácil de solucionar, solo agregando la sección del web.config que falta, es decir la "profile" debajo de "system.web".
Puede hacerse de la siguiente manera:
<profile>
<properties>
<add name="email">
<add name="direccion">
</properties>
</profile>
Etiquetas:
error,
espacio de nombre,
profilecommon
lunes, 22 de febrero de 2010
Abrir archivo en asp.net
Para devolver un archivo cualquiera en asp.net, primero se deben borrar los contenidos de cabeceras y contenido en general. Luego poner el tipo de contenido mime (text/html, text/plain, etc). Y luego simplemente escribir el archivo a la salida de la página:
dim fullPath as string = "C:\temp\a.xls"
Response.ClearHeaders()
Response.ClearContent()
Response.ContentType = "application/vnd.ms-excel"
Response.AddHeader("Content-Disposition", "attachment;filename=" + filename)
Response.WriteFile(fullPath)
Response.Flush()
Response.End()
Etiquetas:
devolver archivo asp.net,
exportar archivo excel
Como obtener el path temporal en .Net
Los directorios temporales son buenos para guardar registros simples durante la ejecución de un programa. Puede ser una operación de nuestro programa, como una descompresión o un archivo de salida que solo servirá por un tiempo y luego se podrá borrar.
La ubcación del archivo temporal variará de sistema operativo a otros, por eso usamos este pequeño código para obtener el path temporal.
string sDir = System.IO.Path.GetTempPath();
Console.WriteLine("Path temporario = " + sDir );
Etiquetas:
.net temp folder,
directorio temp,
directorio temporario
validar email con expresiones regulares
Para validar con javascript un mail mediante expresiones regulares tenemos que crear un patrón de la expresión y luego testearlo contra la cadena dada (que debe provenir del control que contiene la dirección de email):
var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
return emailPattern.test(elementValue);
}
Etiquetas:
validate email regexp
miércoles, 17 de febrero de 2010
Cannot create/shadow copy '#webname#' when that file already exists
Para corregir este error lo único que se puede hacer es un rebuild de todo el sitio, volver a cargar el sitio.
Si esto no funcionará tratar de nuevo, en general funciona correctamente.
Etiquetas:
asp.net cannot create shadow copy
Login failed for user 'user1'. The user is not associated with a trusted SQL Server connection
Este mensaje indica que SQL Server no permite el acceso a este usuario, porque está en modo de Autenticacion Windows, Hay que cambiar el modo a "mixto". Se hace de la siguiente manera:
- Ir a propiedades del server
- Ir a Seguridad
- En la seccion Autenticación del Server hay que seleccionar "Modo de autenticacion de SQL Server y Windows" (que es el modo mixto que permite los dos modos)
Hacer invisible una tabla HTML
Hacer una funcion en javascript que haga lo siguiente y llamarla pasandole en checked true o false:
function hideOptions(var checked){
if(checked)
hide='none';
else
hide='';
var obj=document.getElementById('HTMLTableID');
obj.style.display = hide;
}
function hideOptions(var checked){
if(checked)
hide='none';
else
hide='';
var obj=document.getElementById('HTMLTableID');
obj.style.display = hide;
}
Etiquetas:
invisible html table javascript
Como usar el ProfileCommon desde App_Code
Para usar el profileCommon desde una clase en app_code, que nos permite acceder a datos de usuarios, crearlos, etc, se puede acceder de esta manera:
ProfileCommon p = (ProfileCommon)ProfileBase.Create(tmp_username,true);
Este es un metodo estático, que crea una versión mas genérica del profile, profileBase, por eso hay que castearla a ProfileCommon.
Etiquetas:
profilecommon accederlos desde una clase
martes, 16 de febrero de 2010
Poner un elemento u objeto invisible en javascript
Para ocultar un objeto seteamos el elemento visibility del estilo en hidden o en blanco para hacerlo visible:
var obj=document.getElementById('IdObjeto');
obj.style.visibility = hide;
Etiquetas:
hidden object,
visible javascript
SQL: cuantos registros fueron afectados?
Si uno desea saber en un sql, stored procedure, etc cuantos fueron los registros afectados por la ultima operacion, debe hacer:
SELECT @@ROWCOUNT
Por ejemplo para insertar un registro si no se pudo hacer la actualización (pseudocodigo):
UPDATE tabla con registro=ID
IF @@ROWCOUNT=0
BEGIN
INSERT tabla mismo registro
END
Etiquetas:
actualizar registro,
registros afectados,
rowcount,
sql
MSSQL Reemplazar
En microsoft SQL (MsSQL) la forma de reemplazar un texto en un campo es de la siguiente manera:
REPLACE ( expresion , cosa_a_reemplazar , reemplazo)
por ejemplo:
PRINT REPLACE ( 'Hola blabla tal?' , 'blabla' , 'que')
Lo que daria como resultado: 'Hola que tal?'
REPLACE ( expresion , cosa_a_reemplazar , reemplazo)
por ejemplo:
PRINT REPLACE ( 'Hola blabla tal?' , 'blabla' , 'que')
Lo que daria como resultado: 'Hola que tal?'
Etiquetas:
reemplazar,
TSQL Replace
lunes, 15 de febrero de 2010
Editar y seguir corriendo
Esto solo anda con el web server itnerno de VS, no con IIS.
Para hacer andar el comando "Edit and Continue" en Visual Studio asp.net hay que hacer dos cosas que estan no tan a la vista.
Por un lado en Herramientas / Opciones / Depuración (Si no lo encuentra ir debajo y chequear mostrar todas las opciones) y ahi encontrará en Edit and Continue y chequear "habilitar".
Luego en las propiedades del proyecto en Web, habilitar edit and continue también.
Y asi deberia andar.
Para hacer andar el comando "Edit and Continue" en Visual Studio asp.net hay que hacer dos cosas que estan no tan a la vista.
Por un lado en Herramientas / Opciones / Depuración (Si no lo encuentra ir debajo y chequear mostrar todas las opciones) y ahi encontrará en Edit and Continue y chequear "habilitar".
Luego en las propiedades del proyecto en Web, habilitar edit and continue también.
Y asi deberia andar.
Etiquetas:
Edit and continue asp.net
jueves, 11 de febrero de 2010
errores corriendo aplicaciones en drives de red
Errores tales como:
"Project location is not trust", "No se confia en la ubicacion del proyecto", "No se pueden obtener los permisos necesarios" etc, significan que .net no puede tomar permisos en el caso de una ubicacion de red.
Si agregamos la ubicacion de red como un disco de Red (Z: en la mayoria de los casos), este disco es como si fuera de la maquina, para darle acceso debemos correr desde una ventana de comando de las que vienen en el grupo de inicio de visual studio, con permisos de administrador :
c:\>caspol -q -machine -addgroup 1 -url file://z:/* FullTrust -name "Z Drive"
Una vez hecho esto se le dará permisos fulltrust a cualquier codigo en ese disco, asi que tenga cuidado.
Creando una nueva planilla en excel desde c#
using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\dummy.xls;Extended Properties='Excel 8.0;HDR=Yes'"))
{
conn.Open();
OleDbCommand cmd = new OleDbCommand("CREATE TABLE [Sheet1] ([Col1] string, [Col2] string)", conn);
cmd.ExecuteNonQuery();
}
Etiquetas:
crear excel c#
lunes, 8 de febrero de 2010
encodear url en forms
Para codificar una string como url en forms de c# hay que agregar una referencia a System.Web (boton derecho sobre el proyecto, Agregar referencia, y luego seleccionar System.web)
Luego llamar al metodo estatico asi:
string url = HttpUtility.UrlEncode(cadena);
Etiquetas:
C# forms urlencode
Suscribirse a:
Entradas (Atom)