quarta-feira, 23 de junho de 2010

CRUD em um DATASET C# com Enterprise Library

Este artigo trataremos sobre Inclusão, Alteração e Exclusão diretamente de um DataSet.
Você deve possuir instalado o Enterprise Library 4.1.

As namespaces necessárias são as seguintes:

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Practices.EnterpriseLibrary.Data;
using Microsoft.Practices.EnterpriseLibrary.Data.Sql;
using System.Data.Common;
using System.Data.SqlClient;
using System.Data;


As proriedade e variaveis sao:

public static Database db { set; get; }
public static DbCommand dbCommand { set; get; }
private DbTransaction dbtransaction;


Metodo para fazer o CRUD é o SAVE, nele devemos passar o DATASET que foi alterado, um array com os parametros para Delete, uma Dictionary com os Campos e uma Dictionary com as Queries de Insert, Update e Delete. O resto é feito pelos outros metodos.

protected void Save(DataSet ds, String[] nameColDelete, Dictionary Fields, Dictionary Queries)
{


string insertProc = getQueryXml("insert", Queries);
DbCommand insertCmd = db.GetSqlStringCommand(insertProc);
this.GenerateParamDs(Fields, insertCmd);


string updateProc = getQueryXml("update", Queries);
DbCommand updateCmd = db.GetSqlStringCommand(updateProc);
this.GenerateParamDs(Fields, updateCmd);

string deleteProc = getQueryXml("delete", Queries);
DbCommand deleteCmd = db.GetSqlStringCommand(deleteProc);
foreach (String _nameCollumn in nameColDelete)
{
db.AddInParameter(deleteCmd, _nameCollumn.ToString().Trim(), DbType.String, _nameCollumn.ToString().Trim(), DataRowVersion.Current);
}


DbConnection connection = db.CreateConnection();
connection.Open();
DbTransaction transaction = connection.BeginTransaction();
try
{

int rowsAffected = db.UpdateDataSet(ds, "Table", insertCmd, updateCmd, deleteCmd, transaction);
transaction.Commit();
}
catch (SqlException ex)
{
transaction.Rollback();
throw new FormatException(this.DbErrorMessage(ex.Number));

}
finally
{
if (connection != null && connection.State == ConnectionState.Open)
connection.Close();
}
}





Metodo serve para capturar as queries na dictionary

protected string getQueryXml(String Tipo, Dictionary Queries)
{
string returnString = "";

foreach (KeyValuePair pair in Queries)
{
if (pair.Value.ToString().ToLower() == Tipo.ToString().ToLower())
returnString = pair.Key.ToString().Replace("\n","");
}

return returnString;
}


Metodo para Gerar os parametros passado pelo Dictionary


protected void GenerateParamDs(Dictionary Fields, DbCommand dbCom)
{

foreach (KeyValuePair Field in Fields)
{

db.AddInParameter(dbCom, this.VerifyParamQuery("@" + Field.Key), this.getDbType(Field.Value), Field.Key, DataRowVersion.Current);
}



}

Seta o tipo de dados de banco de dados.

protected DbType getDbType(object dbType)
{
DbType locaDb = DbType.String;
string resultdbType = dbType.GetType().Name.ToString();
switch (resultdbType)
{
case "String":
locaDb = DbType.String;
break;
case "Int16":
locaDb = DbType.Int16;
break;
case "Int":
locaDb = DbType.Int16;
break;
case "Int32":
locaDb = DbType.Int16;
break;
case "int":
locaDb = DbType.Int16;
break;
case "DateTime":
locaDb = DbType.DateTime;
break;
}
return locaDb;
}

Por ser um material mais avançado não dei os pequenos detalhes sobre o código pois deve ser pre-requisito do leitor de tal artigo, mas caso haja duvidas postem no twitter:

twitter.com/devdicas


Autor: CArlos Bueno

Nenhum comentário:

Postar um comentário