OKHOSTING.SQL

fondo-head

HOSTING PREMIUM

DESDE $1,100 mxn

WEB HOSTING

ESTABILIDAD, VELOCIDAD Y CONFIANZA
EN TU WEB Y CORREO

1.Introduccion

OKHOSTING.Sql es un proyecto open source que te permite realizar operaciones sobre la mayor cantidad de gestores de bases de datos utilizados actualmente en el mercado (Mysql, SQLServer, etc).

Para la plataforma de Xamarin, solo esta soportados los motores de mysql y sqlite, para la plataforma de moviles (Android, iOS, WindowsPhone) se soporta sqlite, para la plataforma de Net4 se soporta mysql, sql server, sqlite, OBDC, OLEDB, PostGre y SQLite.

Una de las ventajas que te permite realizar este proyecto es crear el codigo sql requerido para el motor de base de datos que necesites usar, desde operaciones simples como un Insert hasta Selects más complejos.

OKHOSTING.Sql esta desarrollado utilizando C# y listo para utilizar en plataformas Windows, Linux, Mac OS, dispositivos moviles Android y IOS.

Con OKHOSTING.Sql podras crear tablas en bases de datos, modificarlas y tambien podras eliminarlas de una manera muy simple, podras tambien agregar columnas, editar propiedades a los campos y podras crear columnas con llaves primarias y foraneas a cualquier tabla de la base de datos.

Ponemos a su disposión la documentación tecnica del codigo funte del proyecto OKHOSTING.Sql

2.Documentación Tecnica

En esta sección podras consultar la documentacion tecnica de todo el proyeto OKHOSTING.Sql:

3.Requerimientos

Antes de comenzar a utilizar OKHOSTING.Sql, es necesario tener conocimientos basicos de C#. Ademas de que es inidpensable tambien tener conocimientos de SQL, ya que es este el lenguaje con el que trabajan los motores de base de datos previamente señalados.

4.Instalación

Para poder utilizar el repositorio de OKHOSTING.SQL es necesario instalar el repositorio, que se puede realizar instalando directamente el paquete desde el administrador de paquetes, como se muestra acontinuación:


PM> Install-Package OKHOSTING.Sql

O bien descargando el repositorio directmente de la pagina donde se encuentra el nuget:
https://www.nuget.org/packages/OKHOSTING.Sql/

5. Configurar la conexión a la base de datos

Antes de poder realizar cualquier operación sobre la base de datos es necesario establecer la conexión con la base de datos, por lo cual se sugiere realizar dicha conexión a la base
de datos en un metodo que te devuelve dicha conexión, como el siguiente ejemplo:


public DataBase Connect()
{
return new Net4.MySql.DataBase() { ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["mysql"].ConnectionString };
}

De esta manera podemos obtener la conexion a una base de datos de mysql, pasando por parametro la cadena de conexion a la base de datos sobre la cual se va a conectar, en este caso con System.Configuration.ConfigurationManager.ConnectionStrings[“mysql”].ConnectionString le estamos diciendo que va a sacer del archivo de configuracion de la variable “mysql”, la cadena de conexion.
Cabe mencionar que tambien es posible pasar directamente la cadena de conexión de la base de datos, de la siguiente manera:


public DataBase Connect()
{
return new Net4.MySql.DataBase() { ConnectionString = "server=localhost;database=nombre_bd;user id=usuario;password=asda5445;" };
}

6.Usar OKHOSTING.Sql con una BD existente

Una de las vetajas que te permite OKHOSTING:Sql es poder cargar completamente el schema de la base de datos con todas sus tablas, vistas, usuario, triggers que se encuantran en la base de datos y listas para utilizar de una manera muy simple y basta con cargarla de la siguiente manera:


public void LoadSchema()
{
DataBase db = Connect();
var schema = db.Schema;
}

De esta manera estaremos cargando la base de datos con todas sus tablas, vistas triggers, usuarios. Que podran ser utilizadas de una manera muy simple, para poder realizar operaciones como insert, update, delete o selects que te serviran para poder hacer consultas a la base de datos.

Cuando se desea cargar por ejemplo una base de datos de mysql, es necesario tener instalado el conector adecuado para la base de datos, y para la platafoma Net4 em este caso y especificar el tipo de base de datos con el que se desea trabajar.

6.1.Cargar una tabla de la base de datos

Una de las venatajas que te permite OKHOSTING.Sql es la posiblidad de poder usar las tablas de la base de datos, cuando haya sido previamente cargado el schema, y esto lo logramos de una manera muy simple como se muestra en el siguiente ejemplo:


public void cargarTabla()
{
Net4.MySql.Database db = Connect();
db.loadSchema();
var schema = db.Schema;
Table table = schema["Nombre_de_la_tabla"];
}

6.2.Insertar datos en una tabla

Una de las ventajas que te permite OKHOSTING.Sql es poder insertar datos en una tabla de una manera muy flexible y muy sencilla como se muestra de la siguiente manera:


public void insertarDatos()
{
Net4.MySql.Database db = Connect();
db.loadSchema();
var schema = db.Schema;
var generator = new MySql.SqlGenerator();
Table customer = schema["Customer"];
Insert insert = new Insert();
insert.Table = customer;
insert.Values.Add(new ColumnValue(customer["Id"], 1));
insert.Values.Add(new ColumnValue(customer["Name"], "Angel"));
insert.Values.Add(new ColumnValue(customer["Country"], 1));
var sql = generator.Insert(insert);
int affectedRows = db.Execute(sql);
}

Nota: En caso de que una campo de la tabla tenga la propiedad de generrar un valor auto numerico, no es necsario especificar este dato al momento de insertar un valor a la tabla

6.3.Actualizar datos en una tabla

Al igual que con el proceso para insertar datos en una tabla, el actualizarlos es una tarea muy simple que OKHOSTING.Sql te permite realizar una manera muy senccila con un comando muy intuitivo como lo es update, ya que de la misma manera se crea la sentencia sql, que sera ejecutada, como se muestra en la siguiente forma:


public void actualizarDatos()
{
Net4.MySql.Database db = Connect();
db.loadSchema();
var schema = db.Schema;
var generator = new MySql.SqlGenerator();
Table customer = schema["Customer"];
Update update = new Update();
update.Table = customer;
update.Set.Add(new ColumnValue(customer["Name"], "New company name"));
update.Where.Add(new ValueCompareFilter() { Column = customer["id"], ValueToCompare = 1 });
var sql = generator.Update(update);
int affectedRows = db.Execute(sql);
}

Como podemos ver nuevamente usamos el metodo Assert para comprobar si se realizo correctamente la actualizacion en la base de datos, ya que al igual que el insert el comando update nos devuelve el numero de filas afectadas, en este caso 1, ya que solo es un registro el que estamos modificando, la siguiente linea:


update.Where.Add(new ValueCompareFilter() { Column = customer["id"], ValueToCompare = 1 });

En esta parte es necesario mencionar que para hacer una actualizacion a un registro es necesario agregar un filtro where de lo contrario, todos los campos de las filas en la columna especifica tomaran el valor indicado en el update.

6.4.Borrar registros de una tabla

OKHOSTING.Sql te permite borrar datos de una tabla de una manera muy simple, ya que basta con agregar un comando delete que te permitira agregar datos de una fila de la siguiente manera:


public void borrarDatos()
{
Net4.MySql.DataBase db = Connect();
db.loadSchema();
var schema = db.Schema;
var generator = new MySql.SqlGenerator();
Table customer = schema["Customer"];
Delete delete = new Delete();
delete.Table = customer;
delete.Where.Add(new ValueCompareFilter() { Column = customer["Company"], ValueToCompare = "Monsters Inc. Corporate", Operator = Data.CompareOperator.Equal });
var sql = generator.Delete(delete);
int affectedRows = db.Execute(sql);
}

Es importante mencionar que al igual que en el comando update si no especifica una clausula where todos las filas de la tabla indicada serán afectadas, en este caso, todos los registros de la tabla seran eliminados.

6.5.Consultas a una tabla en la base de datos

OKHOSTING.Sql te permite realizar de una manera muy simple consultas a una tabla en la base de datos, de la misma manera que en los comando anteriores es necesario especificar la tabla de la cual se desean realizar consultas, como se especifica de la seguienete manera:


public void cargarDatos()
{
Net4.MySql.DataBase db = Connect();
db.loadSchema();
var schema = db.Schema();
Table customer = schema["Customer"];
Select select = new Select();
select.Table = customer;
select.Columns.Add(customer["Id"]);
select.Columns.Add(customer["Name"]);
select.Columns.Add(customer["Age"]);
select.Where.Add(new ValueCompareFilter() { Column = customer["Name"], ValueToCompare = "Angel", Operator = Data.CompareOperator.Equal });
var sql = generator.Select(select);
var result = db.GetDataTable(sql);
}

A diferencia de los otros comandos que solo devuelven el numero de columnas afectadas, el comando select nos devuelve un dataTable, que es donde se alojan todos los obtenidos de la consulta como se menciona anteriormente:


var result = db.GetDataTable(sql);

Nota:
Es indispensable mencionar que si no se especifica al mnenos una columna, el motor de la base de datos podria arrogar un error, por lo cual es muy necesario indicar al menos una columna.

Un dataTable nos devuelve una coleccion de filas con todos los datos de la consulta, para poder ver todos los datos obtenidos es necesario recorrer todas las filas mediante un bloque ya que esta es una coleccion de filas, como se muestra de la siguiente manera:


foreach (IDataRow row in result)
{
foreach (object obj in row)
{
Console.Write(obj);
}
}

6.6.Realizar consultas usando un select join

OKHOSTING.Sql te permite realizar consultas mas complejas usando joins, especificando la tabla de la cual se van comparar los datos con los cuales se relacionan ambas tablas, mediante una columna en comun, como se muestra en el siguiente ejemplo:


public void cargarMultiplesDatos()
{
Net4.MySql.DataBase db = Connect();
db.loadSchema();
var schema = db.Schema();
var generator = new MySql.SqlGenerator();
Table customer = schema["Customer"];
Table sale = schema["Sale"];
//select sale for customer 'Joyas Loyane SA de CV'
Select select = new Select();
select.Table = sale;
select.Columns.Add(new SelectColumn(sale["id"]));
select.Columns.Add(new SelectColumn(sale["Date"]));
//join for get name Customer
SelectJoin join = new SelectJoin();
join.Table = customer;
join.On.Add(new ColumnCompareFilter() { Column = sale["Customer"], ColumnToCompare = customer["Id"], Operator = Data.CompareOperator.Equal });
join.Columns.Add(new SelectColumn(customer["Name"], "customerName"));
join.JoinType = SelectJoinType.Inner;
//Add Join in select
select.Joins.Add(join);
var sql = generator.Select(select);
var result = db.GetDataTable(sql);
}

Al igual que con el select ordinario el obtener los datos de una consulta, se realiza recorriendo cada fila del dataTable, asi mismo para obtener cada dato de cada columna, podria realizarse recorriendo cada columna o usando el nombre de mcada columna, en este caso po ejemplo podriamos obtener el valor de una columna de acuerdo a su nombre de la siguiente manera:


foreach (IDataRow row in result)
{
var name = row["customerName"];
}

En este caso para obtener el nombre de la columna que estamos obteniendo proviene del select join asi que en este caso para evitar que haya alguna otra columna con el mismo nombre, usamos el nombre que le asignamos con el alias, como se mostro anteriormente.

7.Crear una BD desde codigo

OKHOSTING.Sql te permite crear la estructura de una base de datos desde 0, definiendo la estructura de las tablas, llaves foraneas, indices, vistas y triggers, que te permitiran defirnir la estructura de tu base de datos de acuerdo a tus necesidades.

7.1.Crear una tabla

OKHOSTING.Sql te permite de manera muy simple crear una tabla en la base de datos, utilizando un comando muy simple, e indicando el nombre de la tabla y estableciendo cada columna con su nombre y tipo de dato que va a alojar, asi como su llave primaria, valores adicionales como auto_increment o cualquier otro valor que pudiera agregarsele, como en el¿ siguiente ejemplo:


public void crearTabla()
{
Net4.MySql.DataBase db = Connect();
var generator = new MySql.SqlGenerator();
//define table schema
Table table = new Table("test1");
table.Columns.Add(new Column() { Name = "Id", DbType = DbType.Int32, IsPrimaryKey = true, IsAutoNumber = true, Table = table });
table.Columns.Add(new Column() { Name = "TextField", DbType = DbType.AnsiString, Length = 100, 	IsNullable = false, Table = table });
table.Columns.Add(new Column() { Name = "NumberField", DbType = DbType.Int32, IsNullable = false, Table = table });
//create table into schema
var sql = generator.Create(table);
db.Execute(sql);
}

En este caso primeramente, creamos el objeto Table indicando el nombre de la tabla en el constructor, despues empezamos a crear las columnas que tendra la tabla, indicando su nombre, tipo de datos y si es que lleva algun dato adicional como se musetra acontinuacion:


table.Columns.Add(new Column() { Name = "Id", DbType = DbType.Int32, IsPrimaryKey = true, IsAutoNumber = true, Table = table });

Por ultimo creamos el codigo sql y se lo pasmos al ejecutor para crear la tabla en la base de datos.


var sql = generator.Create(table);
db.Execute(sql);

7.2.Crear un index

Crear un index para una tabla en la base de datos es una labor muy simple en OKHOSTING.Sql, basta con crear un objeto index, especificar el nombre del indice, la tabla donde se va a plicar dicho indice y generar el codigo sql, que a su vez sera ejecutado para crearse en la base de datos, como se muestra a continuacion:


public void crearIndex()
{
DataBase db = Connect();
var generator = new OKHOSTING.Sql.MySql.SqlGenerator();
//define table schema
Table table = new Table("test1");
table.Columns.Add(new Column() { Name = "Id", DbType = DbType.Int32, IsPrimaryKey = true, IsAutoNumber = true, Table = table });
table.Columns.Add(new Column() { Name = "TextField", DbType = DbType.AnsiString, Length = 100, IsNullable = false, Table = table });
table.Columns.Add(new Column() { Name = "NumberField", DbType = DbType.Int32, IsNullable = false, Table = table });
table.Indexes.Add(new Index() { Name = "IX_TextField", Unique = true, Table = table });
table.Indexes[0].Columns.Add(table["TextField"]);
var sql = generator.Create(table);
db.Execute(sql);
sql = generator.Create(table.Indexes[0]);
db.Execute(sql);
}

7.3.Crear una llave foranea

De la misma manera como hemos estado creando las tablas y los indice, crear una llave foranea no es una tarea dificil, ya que basta con crear un objeto ForeignKey que especificara la tabla en la que se aplicara la llave foranea, la tabla remota de la cual se hara la comparacion para las columnas en comun que se desean obtener, indicar el nombre de la llave foranea.


public void crearForeignkey()
{
Net4.MySql.Database db = Connect();
db.loadSchema();
var schema = db.Schema;
Table sale = schema["Sale"];
Table customer = schema["Customer"];
//define Foreign Key Sale to Customer
ForeignKey customerFK = new ForeignKey();
customerFK.Table = sale;
customerFK.RemoteTable = customer;
customerFK.Name = "FK_sale_customer";
customerFK.Columns.Add(new Tuple<Column, Column>(sale["Customer"], customer["Id"]));
customerFK.DeleteAction = customerFK.UpdateAction = ConstraintAction.Restrict;
var sql = generator.Create(customerFK);
db.Execute(sql);
}

Como podemos ver la ultima linea nos indica la accion que se debe realizar cuando se quiera borrar un registro de una tabla que contenga una llave foranea, ya sea que se quiera actualizar, todos los registros que tengan la relacion de la llave foranea, borrar todos los elemnentos en cascada, o incluso restringir la accion de borrado, sobre los registros que se quieran aplicar y que contiene la relacion de la llave foranea.
De esta manera definimos la estructura de la llave foranea, ahora solo falta generar el codigo sql y ejecutarlo en la base de datos como se muestra de la siguiente manera:


//Create foreign Key Sale to Customer
sql = generator.Create(customerFK);
db.Execute(sql);

8.Select con filtros avanzados

OKHOSTING.Sql te permite crear consultas utilizando filtros mas avanzados, como lo son filtros Like, Range, In, Or, And.

8.1.Filtro Like

OKHOSTING.Sql te permite de una manera muy sencilla, realizar una consulta utilizando un filtro like, que es muy util cuando se quiere realizar una consulta no tan especifica, pero que es muy util cuando se
quiere por ejemplo obtener todos los clientes cuyo nombre inicia con “So”, en dicho caso nos devolveria, todos aquellos valores que comienzan con “So” como se muestra en el siguiente ejemplo:


public void selectLike()
{
Net4.MySql.DataBase db = Connect();
db.LoadSchema();
var schema = db.Schema;
var generator = new MySql.SqlGenerator();
Table customer = schema["Customer"];
Select select = new Select();
select.Table = customer;
select.Columns.Add(customer["Id"]);
select.Columns.Add(customer["Company"]);
select.Columns.Add(customer["Email"]);
select.Where.Add(new LikeFilter() { Column = customer["Company"], CaseSensitive=false, Pattern="So%" });
var sql = generator.Select(select);
var result = db.GetDataTable(sql);
}

Como hemos visto antes estamos usando usando un select como lo habiamos venido haciendo anteriormente, solo que en esta ocasion para especificar que se trata de una consulta con un filtro Like, como se muestra de la siguiente manera:


select.Where.Add(new LikeFilter() { Column = customer["Company"], CaseSensitive=false, Pattern="So%" });	

Cuando creamos un filtro Like en una consulta, lo hacemos creando un nuevo objeto LikeFiltre dentro de la clausula Where, aqui es nonde indicamos el nombre de la columna, si el patron por el cual se va a realizar la consulta es caseSensitive o no lo es, y el patron del Like por el cual se va a realizar la consulta ya filtrada.

8.2.Filtro Range

OKHOSTING.Sql al igual que un filterLike, nos permite realizar una consulta utilizando un filtro que nos permitira obtenr los resultados de una consulta con un rango de datos especificado, por ejemplo que me devuelva los registros cuyo id esta entre 10 y 20, como se indica en el siguiente ejemplo:


public void selectRange()
{
Net4.MySql.DataBase db = Connect();
db.LoadSchema();
var schema = db.Schema;
var generator = new MySql.SqlGenerator();
Table customer = schema["Customer"];
//SELECT id, name, age FROM person WHERE name='Angel'
Select select = new Select();
select.Table = customer;
select.Columns.Add(customer["Id"]);
select.Columns.Add(customer["Company"]);
select.Columns.Add(customer["Email"]);
select.Where.Add(new RangeFilter() { Column = customer["Id"],MinValue = 10, MaxValue= 20 });
var sql = generator.Select(select);
var result = db.GetDataTable(sql);
//Show result in command line
foreach (IDataRow row in result)
{
foreach (object obj in row)
{
Console.Write(obj);
}
}
}	

De la misma manera que con el filterLike, en este caso solo indicamos que se trata de un filtro Range en la clausula Where como se muestra a continuacion:


select.Where.Add(new RangeFilter() { Column = customer["Id"],MinValue = 10, MaxValue= 20 });

En este caso se especifica la columna de la cual se quiere hacer la comparacion, el valor minimo del rango por el cual se comienza el rango deseado y el valor maximo que es donde termina el rango por el cual se obtiene la consulta.

8.3.Filtro In

OKHOSTING.Sql te permite realizar una consulta especificando una lista de valores por la cual se desea que realize la busqueda, sin devolver todos los datos existente, solo aquellos valores, que se hayn especificado previamente como se muestra en seguida:


public void selectIn()
{
Net4.MySql.DataBase db = Connect();
db.LoadSchema();
var schema = db.Schema;
var generator = new MySql.SqlGenerator();
Table customer = schema["Customer"];
InFilter inFilter = new InFilter();
inFilter.Column = customer["Company"];
inFilter.CaseSensitive = false;
inFilter.Values.Add("Software Create Inc.");
inFilter.Values.Add("OKHOSTING SC");
//SELECT id, name, age FROM person WHERE name='Angel'
Select select = new Select();
select.Table = customer;
select.Columns.Add(customer["Id"]);
select.Columns.Add(customer["Company"]);
select.Columns.Add(customer["Email"]);
select.Where.Add(inFilter);
var sql = generator.Select(select);
var result = db.GetDataTable(sql);
//Show result in command line
foreach (IDataRow row in result)
{
foreach (object obj in row)
{
Console.Write(obj);
}
}
}

En este filtro la parte esencial se especifica en la creacion del objeto Filter in, en el cual se especifica la columna donde se buscan los datos por los que se desea filtrar, la lista de valores y se indica si se desea que la busqueda respete CaseSensitive, como lo mostramos continuacion:


InFilter inFilter = new InFilter();
inFilter.Column = customer["Company"];
inFilter.CaseSensitive = false;
inFilter.Values.Add("Software Create Inc.");
inFilter.Values.Add("OKHOSTING SC");

8.4.Filtro Or

OKHOSTING.Sql te permite de manera muy simple realizar consultas más complejas utilizando filtros que permitan realizar condiciones mas especificas como se muestra en el siguiente ejemplo:


public void selectOr()
{
Net4.MySql.DataBase db = Connect();
db.LoadSchema();
var schema = db.Schema;
var generator = new MySql.SqlGenerator();
Table customer = schema["Customer"];
OrFilter orFilter = new OrFilter();
orFilter.InnerFilters.Add(new LikeFilter() { Column = customer["Company"], CaseSensitive = false, Pattern = "So%" });
orFilter.InnerFilters.Add(new RangeFilter() { Column = customer["Id"], MinValue = 2, MaxValue = 4 });
//SELECT id, name, age FROM person WHERE name='Angel'
Select select = new Select();
select.Table = customer;
select.Columns.Add(customer["Id"]);
select.Columns.Add(customer["Company"]);
select.Columns.Add(customer["Email"]);
select.Where.Add(orFilter);
var sql = generator.Select(select);
var result = db.GetDataTable(sql);
//Show result in command line
foreach (IDataRow row in result)
{
foreach (object obj in row)
{
Console.Write(obj);
}
}
}

A diferencia del filtro In, este tipo de filtros te permite de una mas simple realizar una consulta utilanndo multiples filtros que son unidos atravez del operador logico Or, bastacon crear un nuevo objeto OrFilter, y agregar en el una coleccion de filtros que se aplicaran y que seran unidos atravez del operador logico Or:


OrFilter orFilter = new OrFilter();
orFilter.InnerFilters.Add(new LikeFilter() { Column = customer["Company"], CaseSensitive = false, Pattern = "So%" });
orFilter.InnerFilters.Add(new RangeFilter() { Column = customer["Id"], MinValue = 2, MaxValue = 4 });

Despues de crear el filtro y agregar la lista de filtros que se desean aplicar a la consulta el unico paso que nos resta es insertar el filtro or a la clausula Where del select que se muestra a continuacion:


select.Where.Add(orFilter);
Contáctanos
Platícanos tus requerimientos
¡Te responderemos a la brevedad!
:: +5233 3618 8825
:: 33 1410 5934
:: ventas@okhosting.com
Escríbenos

SOLICITAR COTIZACIÓN