martes, 26 de febrero de 2008

SqlServerCe - SQL Server Compact Edition (Winforms)

/*
Clase tipo capa de datos para Sql Server Compact Edition.
*/


using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.Common;
using System.Data.SqlServerCe;

class DBPortable
{
private static string dbName = "MyDB";
private static string pass = "123456";
private static string connString = "Data Source =\"|DataDirectory|\\" + dbName + ".sdf\"; Password =\"" + pass + "\";";
private SqlCeConnection conn = new SqlCeConnection(connString);

public DBPortable()
{
if (!HaveDB())
{
CreateDB();
CreateSchema();
}
}

private bool HaveDB()
{
if (System.IO.File.Exists(conn.Database))
{
return true;
}
else
{
return false;
}
}

private void CreateDB()
{
using (SqlCeEngine sqlCeEngine = new SqlCeEngine(connString))
{
sqlCeEngine.CreateDatabase();
}
}

public string BuildQueryFromString(string sp, string[] param)
{
string query = sp + " '";
int i = 0;
foreach (string p in param)
{
if (i < param.Length - 1)
query += p + "', '";
else
query += p + "'";
i++;
}
return query;
}
public DataSet ExecQuery(string iQuery)
{
DataSet ds = new DataSet();
SqlCeDataAdapter adapter = new SqlCeDataAdapter();

try
{
SqlCeCommand command = new SqlCeCommand(iQuery, this.conn);
adapter.SelectCommand = command;
this.conn.Open();
command.Connection = this.conn;
adapter.Fill(ds);
}
catch (SqlCeException ex)
{
Console.WriteLine(ex.Message);
}
finally
{
this.conn.Close();
}

return ds;

}
public DataSet ExecSP(string sp, string[] param)
{
string iQuery = BuildQueryFromString(sp, param);
DataSet ds = new DataSet();
SqlCeDataAdapter adapter = new SqlCeDataAdapter();

try
{
SqlCeCommand command = new SqlCeCommand(iQuery, this.conn);
adapter.SelectCommand = command;
this.conn.Open();
command.Connection = this.conn;
adapter.Fill(ds);
}
catch(SqlCeException ex)
{
Console.WriteLine(ex.Message);
}
finally
{
this.conn.Close();
}

return ds;
}
private void CreateSchema()
{
string q = "CREATE TABLE TablaDePrueba(ID int NULL, FechaHora DATETIME NULL, ESTADO NCHAR(1))";
this.ExecuteNonQuery(q);
}
private int ExecuteNonQuery(string query)
{
int RowsAffected = 0;

SqlCeCommand objCom = new SqlCeCommand();
objCom.CommandText = query;

try
{
this.conn.Open();
objCom.Connection = this.conn;
RowsAffected = objCom.ExecuteNonQuery();
}
catch (SqlCeException ex)
{
Console.WriteLine(ex.Message);
}
finally
{
this.conn.Close();
}

return RowsAffected;
}

No hay comentarios: