NachXs Blog

Linux, Mono, Programación, ASEJune 28, 2007 2:16 pm

Hace poco estube desarrollando una pequeña aplicación en Mono (Build 1.2.4) el cual trata de conectarse a una base de datos en ASE 15.0(Adaptive Server Enterprise), en base a este codigo pude observar lo siguiente:



using Mono.Data.SybaseClient;

public static void Main( String[] args)
{
    connectionString = “Server=SERVER_BD,5000; Database=demo; User ID=sa; Password=;”;
    IDbConnection dbcon;
    dbcon = new SybaseConnection(connectionString);
    dbcon.Open();
    ….
    ….
    ….
    dbcon.Close();
    dbcon=null;
}

nachxs@kimera:~$ mcs r:System.Data.dll -r:Mono.Data.SybaseClient.dll connect.cs

El detalle es en la cadena de conexión “connectionString”. Por ejemplo, hago lo siguiente:

string connectionString = “Server=SERVER_BD,5000; Database=demo; User ID=sa; Password=;”;

Compilo y ejecuto la clase con esta cadena de conexión y me va bien, me muestra la información que necesito. Pero cuando tengo lo siguiente:

string connectionString = “Server=SERVER_BD,5000; Database=bd$demo; User ID=sa; Password=;”;

Me compila bien pero a la hora de ejecutar me aparece lo siguiente:

Unhandled Exception: System.FormatException: Index (zero based) must be greater than or equal to zero and less than the size of the argument list.
at System.String.FormatHelper (System.Text.StringBuilder result, IFormatProvider provider, System.String format, System.Object[] args) [0x00000]
at System.String.Format (IFormatProvider provider, System.String format, System.Object[] args) [0x00000]
at System.String.Format (System.String format, System.Object[] args) [0x00000]
at Mono.Data.SybaseClient.SybaseConnection.ChangeDatabase (System.String database) [0x00000]
at (wrapper remoting-invoke-with-check) Mono.Data.SybaseClient.SybaseConnection:ChangeDatabase (string)
at Mono.Data.SybaseClient.SybaseConnection.Open () [0x00000]

Según lo que se puede observar, no se esta realizando la conexión a la base de datos, al parecer por el carácter “$” que coloque en la cadena de conexión (Database). Esto lo publique en la lista de mono solicitando alguna respuesta, quizas alguno de los que lean este post me puedan dar algun alcanze sobre esto.

Varios, PersonalJune 27, 2007 1:02 pm

IBSN (Internet Blog Serial Number), te permite registrar tu blog generandote un codigo de barras dejandote escoger tus propia numeracion (10 digitos separado por guiones), que esperas??, registra tu blog.

IBSN: Internet Blog Serial Number 00-000-32-099

Linux, Servidores, Ubuntu, Suse LinuxJune 25, 2007 12:43 pm

Administrando un Servidor de Correo en Suse Linux, se me presento un pequeño problemita, lo que me temia, el espacio en disco :S, cada vez se agregaban mas usuarios por cuestiones de trabajo y poco a poco se iba quedando sin espacio. Pero bueno, por suerte en Linux todo se hace simple (con un poco de informacion claro esta) :P . Se adquirio un nuevo disco duro (120 Gb.) y la idea era montar un direcotrio (/var) a este nevo disco. Esta es una pequeña guia que realize para algunos que todavia no han realizado este tipo de trabajo y para los que ya lo hicieron, seria bueno alguna sugerencia.

  • Lo primero colocar el nuevo disco duro, en mi caso como /dev/hdb1
  • Luego verificamos com fdisk -l, para ver las particiones existentes y el nuevo disco colcado en la cual se vera que el disco todavia no presenta una tabla de particiones o algun tipo de formato.
  • Creamos la particion con fsdik
  • Formateamos la particion creada utilizando el comando mkfs.ext3 (esto es en mi caso, dependera del tipo de Sistema de Archivo que deseen)
  • Una vez formateada la particion, el siguiente paso es crear un directorio en /mnt, el cual lo llamaremos “disk_var”, para eso utilizamos el comando mkdir -p /mnt/disk_var. El motivo de la creacion de este directorio, es para montar el nuevo disco y poder copiar todo el contenido del directorio seleccionado anteriormente (/var)
  • Montamos el nuevo disco en /mnt/disk_var con el comando: mount -t ext3 /dev/hdb1 /mnt/disk_var
  • Una vez montado el disco, copiamos el contenido de /var a /mnt/disk_var con el comando: cp -dpRv /var/* /mnt/disk_var
  • Luego de terminado de copiar el contenido, renombramos el directorio /var por /var_bk (En caso de algun inconveniente :P ) y creamos uno nuevo con mkdir -p /var
  • Desmontamos el disco con el comando: umount /dev/hdb1
  • Luego nos tocaria configurar el archivo /etc/fstab para poder montar el nuevo disco a la hora de iniciar el sistema. Utilizamos un editor con el que mejor te acomodes (yo prefiero vi ) y agregamos la siguiente linea:
    /dev/hdb1 /var ext3 defaults 0 1
  • Guardamos y Reiniciamos

En lo posible trate de abreviar lo que hice, alguna sugerencia o comentarrio para mejorar esto, sera bienvenido.

Linux, Servidores, PostgreSQLJune 22, 2007 10:05 pm

En pocas palabras:
“Conserva el alto rendimiento sin sacrificar la estabilidad ni la integridad de los datos, osea simplemente funciona.”

Obtenido de EcuaLug

Servidores, Base de Datos, PostgreSQLJune 21, 2007 10:16 am

Uno de los pequeños inconvenientes que se me presento a la hora de usar PostgreSQL, fue el ir migrar mis Store Procedures, los cuales lo tengo en ASE (Adaptive Server Enterprise), esto con la finalidad de utilizar Power Builder para un proyecto que estoy desarrollando (por cuestiones de trabajo) y segun comentarios y experiencias con este gestor; es muy bueno y entonces decidi probarlo. En el proceso de aprendizaje tube que migrar algunos SP y de todas maneras me tube que aprender algo del Lenguaje procedural propio de PostgreSQL (PL/PgSQL) y la verdad me parecio muy interesante y no tan dicifil de manejar. Una forma simple de migrar un SP de ASE a PostgreSQL por ejemplo podriamos hacerlo de la siguiente forma:

Procediemiento Almacenado en ASE:

CREATE PROCEDURE dbo.sp_consult_contrib
@tipo char(3),
@valor varchar(100)

AS
BEGIN
  if @tipo = ‘RS’
  Begin
    Select num_ruc From snt$prin_contrib Where nom_rac_soc like @valor+’%’
  End
Else
Begin
    Select nom_rac_soc From snt$prin_contrib Where num_ruc = @valor
End
END

El Mismo Procediemiento en PostgreSQL:

CREATE OR REPLACE FUNCTION sp_consult_contrib(tipo char(3), valor varchar(100))
RETURNS varchar AS $$

DECLARE
  ruc char(11);
  razon varchar(100);
BEGIN
  IF tipo = ‘RS’ THEN
    Select num_ruc into ruc From snt$prin_contrib Where nom_rac_soc like valor || ‘%’;
    RETURN ruc;
  ELSE
    Select nom_rac_soc into razon From snt$prin_contrib Where num_ruc = valor;
    RETURN razon;
  END IF;
END;
$$ LANGUAGE plpgsql;

y la forma de llamarlo desde Power Builder seria mas o menos asi:

string ls_tipo, ls_valor, ls_val_proc
ls_tipo = ‘RUC’
ls_valor = ‘20809898121′
select * into :ls_val_proc from sp_consult_contrib(:ls_tipo,:ls_valor);

En este caso el valor devuelto se alamacena en ls_val_proc

Ahora estoy de proceso de migracion de otros SP, espero no se me complique la cosa pero asi como vamos me parece que todo va por buen camino :P

Varios, PersonalJune 17, 2007 3:45 pm

Hace poco estube revisando el blog de un compañero, NeCuDeCo, y me tope con un video muy interesante que refleja lo que vivimos actualmente. ¿Existe la privacidad realmente?, creo que el video lo dice todo.



Varios, PersonalJune 15, 2007 10:34 am

Bueno despues de un largo descanso que me di, volvemos al “ruedo”, esperando siempre aportar con la experiencia que uno gana o va ganando en el transcurso de los dias con este Genial Sistema Operativo (Linux) y sus derivados . Esperando siempre sus comentarios y opiniones al respecto.