18 messaggi dal 20 ottobre 2010
Ho scaricato un esempio da qui "http://www.codeproject.com/KB/database/DBaseFactGenerics.aspx",con delle classi per l'accesso ai dati ma non sò come utilizzarlo, mi piacerebbe tanto saperlo interpretare , se qualcuno mi potesse aiutare mi farebbe piacere,posto di seguito il contenuto dei file.

Come faccio ad utilizzarlo per esempio recuperare dati da una tabella?

FILE: DataBase.cs

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

namespace Global.Data
{
public abstract class DataBase<TParameter,TDataReader,TConnection, TTransaction,TDataAdapter,TCommand> : IDisposable
where TParameter : DbParameter,IDataParameter
where TDataReader : DbDataReader,IDataReader
where TConnection : DbConnection,IDbConnection,new()
where TTransaction : DbTransaction,IDbTransaction
where TDataAdapter : DbDataAdapter,IDataAdapter,new()
where TCommand : DbCommand, IDbCommand, new()

{
protected TConnection _conn;
protected TTransaction _trans;

public DataBase(string ConnectionString)
{
_conn = new TConnection();
_conn.ConnectionString = ConnectionString;
}

public TConnection Connection
{
get
{
return _conn;
}
}

public TTransaction Transaction
{
get
{
return _trans;
}
}

protected DataSet ExecuteDataSet(string StoreProcName, List<TParameter> Params)
{
bool internalOpen = false;
DataSet ds = null;
TDataAdapter da;
TCommand cmd;


try
{
ds = new DataSet();
da = new TDataAdapter();
cmd = new TCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = StoreProcName;
if (_trans != default(TTransaction))
cmd.Transaction = _trans;
else
cmd.Connection = (TConnection)_conn;

if (Params != null || Params.Count > 0)
{
foreach (DbParameter param in Params)
cmd.Parameters.Add(param);
}

da.SelectCommand = cmd;

if (_conn.State == ConnectionState.Closed)
{
_conn.Open();
internalOpen = true;
}

da.Fill(ds);
return ds;
}
catch (DbException DbEx)
{
throw DbEx;
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (internalOpen)
_conn.Close();
}
}

protected DataSet ExecuteDataSet(string StoreProcName)
{
return ExecuteDataSet(StoreProcName, null);
}

protected T ExecuteScalar<T>(string StoreProcName, List<TParameter> Params)
{
bool internalOpen = false;
TCommand cmd;

try
{

cmd = new TCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = StoreProcName;
if (_trans != default(TTransaction))
cmd.Transaction = _trans;
else
cmd.Connection = _conn;

if (Params != null || Params.Count > 0)
{
foreach (DbParameter param in Params)
cmd.Parameters.Add(param);
}

if (_conn.State == ConnectionState.Closed)
{
_conn.Open();
internalOpen = true;
}


object retVal = cmd.ExecuteScalar();

if (retVal is T)
return (T)retVal;
else if (retVal == DBNull.Value)
return default(T);
else
throw new Exception("Object returned was of the wrong type.");


}
catch (DbException DbEx)
{
throw DbEx;
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (internalOpen)
_conn.Close();
}

}

protected T ExecuteScalar<T>(string StoreProcName)
{
return ExecuteScalar<T>(StoreProcName);
}

protected int ExecuteNonQuery(string StoreProcName, List<TParameter> Params)
{
bool internalOpen = false;
TCommand cmd;


try
{

cmd = new TCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = StoreProcName;
if (_trans != default(TTransaction))
cmd.Transaction = _trans;
else
cmd.Connection = _conn;

if (Params != null || Params.Count > 0)
{
foreach (DbParameter param in Params)
cmd.Parameters.Add(param);
}

if (_conn.State == ConnectionState.Closed)
{
_conn.Open();
internalOpen = true;
}


return cmd.ExecuteNonQuery();


}
catch (DbException DbEx)
{
throw DbEx;
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (internalOpen)
_conn.Close();
}
}

protected int ExecuteNonQuery(string StoreProcName)
{
return ExecuteNonQuery(StoreProcName, null);
}

protected TDataReader ExecuteReader(string StoreProcName, List<TParameter> Params)
{
bool internalOpen = false;
TCommand cmd;


try
{

cmd = new TCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = StoreProcName;
if (_trans != default(TTransaction))
cmd.Transaction = _trans;
else
cmd.Connection = _conn;

if (Params != null || Params.Count > 0)
{
foreach (DbParameter param in Params)
cmd.Parameters.Add(param);
}

if (_conn.State == ConnectionState.Closed)
{
_conn.Open();
internalOpen = true;
}


return (TDataReader)cmd.ExecuteReader();

}
catch (DbException DbEx)
{
throw DbEx;
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (internalOpen)
_conn.Close();
}
}

protected TDataReader ExecuteReader(string StoreProcName)
{
return ExecuteReader(StoreProcName);
}

public bool BeginTransaction()
{
if (_conn != null && _conn.State == ConnectionState.Closed && _trans == null)
{
_conn.Open();
_trans = (TTransaction)_conn.BeginTransaction();
return true;
}
return false;
}

public bool RollBackTransaction()
{
if (_conn != null && _conn.State == ConnectionState.Open && _trans != null)
{
_trans.Rollback();
_conn.Close();

_trans.Dispose();
_trans = default(TTransaction);
return true;
}
return false;
}

public bool CommitTransaction()
{
if (_conn != null && _conn.State == ConnectionState.Open && _trans != null)
{
_trans.Commit();
_conn.Close();

_trans.Dispose();
_trans = default(TTransaction);
return true;
}
return false;
}

public abstract bool RollBackTransaction(string SavePointName);

public abstract bool SaveTransactionPoint(string SavePointName);

#region IDisposable Members

public void Dispose()
{
if (_conn != null)
{
if (_trans != null)
{
_trans.Rollback();
_trans.Dispose();
}

if (_conn.State != ConnectionState.Closed)
_conn.Close();

_conn.Dispose();
}
}

~DataBase()
{
Dispose();
}

#endregion
}
}


FILE MyDataBaseLayer

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

namespace Global.Data
{
public class MyDataBaseLayer<TParameter, TDataReader, TConnection, TTransaction, TDataAdapter, TCommand> : DataBase<TParameter, TDataReader, TConnection, TTransaction, TDataAdapter, TCommand>
where TParameter : DbParameter, IDataParameter,new()
where TDataReader : DbDataReader, IDataReader
where TConnection : DbConnection, IDbConnection, new()
where TTransaction : DbTransaction, IDbTransaction
where TDataAdapter : DbDataAdapter, IDataAdapter, new()
where TCommand : DbCommand, IDbCommand, new()
{
protected List<TParameter> _params;

public MyDataBaseLayer(string ConnectionString):base(ConnectionString)
{}

public Guid InsertNeMember(string MemberName)
{
TParameter paramMemberName = new TParameter();
paramMemberName.ParameterName = "@memberName";
paramMemberName.Value = MemberName;
paramMemberName.DbType = System.Data.DbType.VarNumeric;

_params = new List<TParameter>();
_params.Add(paramMemberName);

return ExecuteScalar<Guid>("proc_Member_Insert",_params);
}

public override bool RollBackTransaction(string SavePointName)
{
throw new Exception("The method or operation is not implemented.");
}

public override bool SaveTransactionPoint(string SavePointName)
{
throw new Exception("The method or operation is not implemented.");
}
}
}

FILE SqlDataBase

using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
using System.Data;

namespace Global.Data
{
public class SqlDataBase : DataBase<SqlParameter,SqlDataReader,SqlConnection,SqlTransaction,SqlDataAdapter,SqlCommand>
{
public SqlDataBase(string ConnectionString)
: base(ConnectionString)
{
}

public override bool RollBackTransaction(string SavePointName)
{
if (_conn != null && _conn.State == ConnectionState.Open && _trans != null)
{
_trans.Rollback(SavePointName);
return true;
}
return false;
}

public override bool SaveTransactionPoint(string SavePointName)
{
if (_conn != null && _conn.State == ConnectionState.Open && _trans != null)
{
_trans.Save(SavePointName);
return true;
}
return false;
}
}
}
Non comprendo il motivo per il quale non utilizzi Entity Framework.

Il codice che hai postato è un buon esercizio e nulla piu.

Fabrizio Canevali
scusami Diana,
premesso che chi risponde a questo forum lo fa per aiutare gli altri a prescindere, direi che non è esattamente il modo di procedere quello di

- prendere un pezzo di codice da un posto qualunque su internet
- postarlo qui su questo forum (o su un altro forum)
- e dire: "chi me lo spiega ?"

onestamente non mi sembra il modo corretto di procedere per imparare a sviluppare, scusa la franchezza...
lo dico senza intenzioni di offendere, si intende, ma proprio per indirizzarti correttamente ;-)
710 messaggi dal 13 novembre 2008
Contributi
riprendendo il discorso puoi scegliere una strada, come ti è stato suggerito:

Entity Framework

classi personalizzate

potresti,nel secondo caso, partire da questo, provarlo e cominciare a costruire le tue classi

http://msdn.microsoft.com/it-it/library/cc185063.aspx

a mio avviso è un articolo molto esplicativo e un ottima base da cui partire
dancerjude ha scritto:
scusami Diana,
premesso che chi risponde a questo forum lo fa per aiutare gli altri a prescindere, direi che non è esattamente il modo di procedere quello di

- prendere un pezzo di codice da un posto qualunque su internet
- postarlo qui su questo forum (o su un altro forum)
- e dire: "chi me lo spiega ?"

onestamente non mi sembra il modo corretto di procedere per imparare a sviluppare, scusa la franchezza...
lo dico senza intenzioni di offendere, si intende, ma proprio per indirizzarti correttamente ;-)

Condivido. Poi se mi posso permettere di darti un "consiglio" puoi prendere quel codice, andare su msdn e "studiare" la tecnica usata. Solo cosi riesci a capire, ma sopratutto ad imparare

Creazione Siti Vicenza
Posizionamento Siti - SEO
18 messaggi dal 20 ottobre 2010
scusatemi io volevo solo capire, perdonami ai ragione.
diana ha scritto:
scusatemi io volevo solo capire, perdonami ai ragione.

Tranquilla, nessun problema!

Creazione Siti Vicenza
Posizionamento Siti - SEO
diana ha scritto:
scusatemi io volevo solo capire, perdonami ai ragione.


nessun problema Diana, anche noi vogliamo aiutarti a capire, ma ovviamente così stai partendo da troppo lontano...

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.