PDA

View Full Version : تحلیل و نظر سنجی کد دسترسی به پایگاه داده



HDDSoft2001
پنج شنبه 08 مرداد 1388, 11:57 صبح
با سلام خدمت دوستان برنامه نویس

راستش من خیلی حافظه و منبع برام مهمه و همچنین سرعت اجرا و ....
کدی که من برای کار با بانک می نویسم به صورت زیر هست. از دوستان خواهش میکنم نظر بدن و مزایا و معایب کد من رو بگویند. در ضمن من با دیتا ست هم مشکل دارم چون سربارش زیاده و از لیست ها استفاده می کنم. در ضمن من به صورت سه لایه معمولا کد می نویسم.

کد دسترسی به داده :



public class BankAccountDAL
{
#region Constant
const byte indID = 0;
const byte indBankName = 1;
const byte indSubstation = 2;
const byte indAccNo = 3;
const byte indTell = 4;
const byte indAddr = 5;
const byte indMojody = 6;
#endregion
// --------------------------------------------------------
public void INSERT(Objects.BankAccountBO Account)
{
BaseDefinetionDAL.Sql.AutoCloseConnection = true;
BaseDefinetionDAL.Sql.Reset();

BaseDefinetionDAL.Sql.AddParameter("@BankName", SqlDbType.NVarChar,
Objects.ModuleBO.ConvertCharFaToAr(Account.BankNam e));
BaseDefinetionDAL.Sql.AddParameter("@Substation", SqlDbType.NVarChar,
Objects.ModuleBO.ConvertCharFaToAr(Account.Substat ion));
BaseDefinetionDAL.Sql.AddParameter("AccNo", SqlDbType.NVarChar,
Objects.ModuleBO.ConvertCharFaToAr(Account.AccNo.T rim()));
BaseDefinetionDAL.Sql.AddParameter("@Tell", SqlDbType.NVarChar,
Objects.ModuleBO.ConvertCharFaToAr(Account.Tell.Tr im()));
BaseDefinetionDAL.Sql.AddParameter("@Addr", SqlDbType.NVarChar,
Objects.ModuleBO.ConvertCharFaToAr(Account.Addr));

BaseDefinetionDAL.Sql.ExecuteSP("sp_BankAccountInsert");
}

public void UPDATE(Objects.BankAccountBO Account)
{
BaseDefinetionDAL.Sql.AutoCloseConnection = true;
BaseDefinetionDAL.Sql.Reset();

BaseDefinetionDAL.Sql.AddParameter("@ID", SqlDbType.SmallInt, Account.ID);
BaseDefinetionDAL.Sql.AddParameter("@BankName", SqlDbType.NVarChar,
Objects.ModuleBO.ConvertCharFaToAr(Account.BankNam e));
BaseDefinetionDAL.Sql.AddParameter("@Substation", SqlDbType.NVarChar,
Objects.ModuleBO.ConvertCharFaToAr(Account.Substat ion));
BaseDefinetionDAL.Sql.AddParameter("AccNo", SqlDbType.NVarChar,
Objects.ModuleBO.ConvertCharFaToAr(Account.AccNo.T rim()));
BaseDefinetionDAL.Sql.AddParameter("@Tell", SqlDbType.NVarChar,
Objects.ModuleBO.ConvertCharFaToAr(Account.Tell.Tr im()));
BaseDefinetionDAL.Sql.AddParameter("@Addr", SqlDbType.NVarChar,
Objects.ModuleBO.ConvertCharFaToAr(Account.Addr));

BaseDefinetionDAL.Sql.ExecuteSP("sp_BankAccountUpdate");
}

public void DELETE(int BankID)
{
BaseDefinetionDAL.Sql.AutoCloseConnection = true;
BaseDefinetionDAL.Sql.Reset();

BaseDefinetionDAL.Sql.AddParameter("@ID", SqlDbType.SmallInt, BankID);

BaseDefinetionDAL.Sql.ExecuteSP("sp_BankAccountDelete");
}

public List<Objects.BankAccountBO> GetAll(int ID, bool GetByID)
{
List<Objects.BankAccountBO> lst = null;

try
{
BaseDefinetionDAL.Sql.AutoCloseConnection = false;
BaseDefinetionDAL.Sql.Reset();

BaseDefinetionDAL.Sql.AddParameter("@ID", SqlDbType.SmallInt, ID);
if (GetByID)
BaseDefinetionDAL.Sql.AddParameter("@GetByID", SqlDbType.TinyInt, 1);
else
BaseDefinetionDAL.Sql.AddParameter("@GetByID", SqlDbType.TinyInt, 0);

SqlDataReader reader =
BaseDefinetionDAL.Sql.ExecuteSPReader("sp_BankAccountSelect");

if (reader.HasRows)
{
lst = new List<Objects.BankAccountBO>();
while (reader.Read())
{
Objects.BankAccountBO Bank =
new Objects.BankAccountBO();

LoadFromReader(reader, Bank);
lst.Add(Bank);
}
}
}
finally
{
BaseDefinetionDAL.Sql.DisConnect();
}
return lst;
}

public int GetMojody(Objects.BankAccountBO Account)
{
BaseDefinetionDAL.Sql.AutoCloseConnection = true;
BaseDefinetionDAL.Sql.Reset();

BaseDefinetionDAL.Sql.AddParameter("@isBank", SqlDbType.Bit, true);
BaseDefinetionDAL.Sql.AddParameter("@ID_Bank_Sandogh", SqlDbType.Int,
Account.ID);

SqlParameter pMojody =
BaseDefinetionDAL.Sql.AddParameter("@Mojody", SqlDbType.Int,
0, ParameterDirection.Output);

BaseDefinetionDAL.Sql.ExecuteSP("sp_GetMojodyBank_Sandogh");

return Convert.ToInt32(pMojody.Value);
}

private void LoadFromReader(SqlDataReader Reader,
Objects.BankAccountBO Bank)
{
if (!Reader.IsClosed)
{
if (!Reader.IsDBNull(indID))
Bank.ID = Reader.GetInt16(indID);

if (!Reader.IsDBNull(indBankName))
Bank.BankName = Objects.ModuleBO.ConvertCharArToFa(Reader.GetStrin g(indBankName));

if (!Reader.IsDBNull(indSubstation))
Bank.Substation = Objects.ModuleBO.ConvertCharArToFa(Reader.GetStrin g(indSubstation));

if (!Reader.IsDBNull(indAccNo))
Bank.AccNo = Objects.ModuleBO.ConvertCharArToFa(Reader.GetStrin g(indAccNo));

if (!Reader.IsDBNull(indTell))
Bank.Tell = Objects.ModuleBO.ConvertCharArToFa(Reader.GetStrin g(indTell));

if (!Reader.IsDBNull(indAddr))
Bank.Addr = Objects.ModuleBO.ConvertCharArToFa(Reader.GetStrin g(indAddr));

if (!Reader.IsDBNull(indMojody))
Bank.Mojody = Reader.GetInt32(indMojody);

}
}
}


--------------------------------------------------------------------------------------

کد میانی (تجاری) :




public bool INSERT(Objects.BankAccountBO Account)
{
try { new DAL.BankAccountDAL().INSERT(Account); return true; }
catch (SqlException e) { new frmMsgError(e.Message, e.Number); return false; }
catch (Exception e) { new frmMsgError(e.Message); return false; }
}

public bool UPDATE(Objects.BankAccountBO Account)
{
try { new DAL.BankAccountDAL().UPDATE(Account); return true; }
catch (SqlException e) { new frmMsgError(e.Message, e.Number); return false; }
catch (Exception e) { new frmMsgError(e.Message); return false; }
}

public bool DELETE(int BankID)
{
try { new DAL.BankAccountDAL().DELETE(BankID); return true; }
catch (SqlException e) { new frmMsgError(e.Message, e.Number); return false; }
catch (Exception e) { new frmMsgError(e.Message); return false; }
}

public List<Objects.BankAccountBO> GetAll()
{
try { return new DAL.BankAccountDAL().GetAll(0, false); }
catch (SqlException e) { new frmMsgError(e.Message, e.Number); return null; }
catch (Exception e) { new frmMsgError(e.Message); return null; }
}

public Objects.BankAccountBO GetByID(int ID)
{
try
{
List<Objects.BankAccountBO> lst =
new DAL.BankAccountDAL().GetAll(ID, true);

if (lst != null)
return lst[0];
return null;
}
catch (SqlException e) { new frmMsgError(e.Message, e.Number); return null; }
catch (Exception e) { new frmMsgError(e.Message); return null; }
}

public int GetMojody(Objects.BankAccountBO Account)
{
try { return new DAL.BankAccountDAL().GetMojody(Account); }
catch (SqlException e) { new frmMsgError(e.Message, e.Number); return 0; }
catch (Exception e) { new frmMsgError(e.Message); return 0; }
}


و در آخر هم که در اینترفیس از این ها استفاده می کنم.


لطف کنید از نظر برنامه نویسی تحت شبکه (منظورم هموم اس کیو ال هست) هم درباره کد من نظر بدید.


متشکرم