[ edit @ 07.04.2004. 23:39 ] @
Napravio sam jednu klasu koja mi predstavlja Data Acces Layer. Aplikacija koju pravim je Logical N-tier, znaci
svi lejeri su na istom racunaru. Business Logic Layer klase bi nasledjivale ovu klasa i dodavale nove
funkcije.


Sa ovom klasom ustedim mnogo vremena, ali nisam siguran koliko je dobro uradjena,
prvenstveno mislim na performanse. Ako neko zna, nek pogleda, pa nek prokomentarise.
Code:

using System;
using System.Data;
using System.Data.SqlClient ; 
using System.Configuration; 
using System.Collections;

namespace appProba
{

    public abstract class sqlBase
    {
        //
        private string stringKonekcija; 
        private SqlConnection _konekcija; 
        private SqlCommand _komanda; 
        private SqlDataAdapter _da; 
        private DataSet _ds; 
        private SqlDataReader _dr; 

        // konstruktor klase 
        

        public sql()
        {
            stringKonekcija = ConfigurationSettings.AppSettings["connStr"];
            _konekcija = new SqlConnection(stringKonekcija); 
            _komanda = new SqlCommand(); 
            _da = new SqlDataAdapter();
        
            _komanda.Connection = _konekcija; 
        }
        
        protected string connStr
        {
            get 
            {
                if (stringKonekcija == null)
                {
                    return "";
                }
                return stringKonekcija;
            }
            
            set 
            {
                stringKonekcija = value; 
            }
        }


        protected DataSet runQueryDataSet()
        {

            _ds = new DataSet("myDataSet");
            _da.SelectCommand = _komanda; 
            _da.Fill(_ds); 
            return _ds; 
        }


        protected int runNonQuery()
        {
            
            _da.InsertCommand = _komanda; 
            _konekcija.Open();
            int rtValue = _da.InsertCommand.ExecuteNonQuery(); 
            _konekcija.Close();
            return rtValue; 
        }

        // podesava parametre  i vrijednosti za _konekcija 

        protected void SetParametar(string imeParametra, SqlDbType DbTip, int duzina, object vrijednost)
        {
            _komanda.Parameters.Add(imeParametra,DbTip,duzina); 
            _komanda.Parameters[imeParametra].Value  = vrijednost; 
        }
        protected void SetCommandInfo(CommandType Tip, string StdProName)
        {
            
            _komanda.CommandType = Tip; 
            _komanda.CommandText = StdProName;
        }

        protected SqlDataReader runQueryDataReader()
        {
            
            _konekcija.Open();
            SqlDataReader _dr = _komanda.ExecuteReader(CommandBehavior.CloseConnection);
            return _dr;

        }
        protected void _ResetCommand()
        {
            _komanda.Dispose(); 
            _da.Dispose(); 
        
            _komanda = new SqlCommand(); 
            _da = new SqlDataAdapter(); 
            _komanda.Connection = _konekcija;

        }

        protected object runScalar()
        {
            _konekcija.Open();
            
            object result = _komanda.ExecuteScalar();
            _konekcija.Close();
            return result;
        }
        
        

    }

}


primjer BLL klase.....


Code:

public class Proizvod: sqlBase
{
    public string id; 
    public string opis;

    public Proizvod(string ID, string OPIS)

    {
        
        
    }
    public DataSet GetById(string idProizvoda)
    {
        this._ResetCommand();
        
        this.SetParametar("@Sifra",SqlDbType.Char , 50,idProizvoda);
        this.SetCommandInfo(CommandType.StoredProcedure, "_GetById") 

                         // "_GetById" je ime Stored proc. na SQL serveru 
        DataSet ds = this.runQueryDataSet();
        return ds;
                
    }
}



[ mmix @ 08.04.2004. 15:35 ] @
Imaš samo jedan koncepcijski previd, nevezano za optimizovanost koda.

BLL instancira DLL, ne nasleđuje je kako ti radiš. U ovom tvom primeru Proizvod je još jedna klasa koja pripada Data Layeru .
[ edit @ 08.04.2004. 23:33 ] @
da razumijem to.
ovo je bilo cisto onako kao primjer...