【发布时间】:2014-06-12 00:15:53
【问题描述】:
我正在尝试实现三层架构。我需要将数据库查询的连接语句放在哪里?
即,如果我有一个 Bill 类,它将有两个表 BillingMaster 和 BillingDetail。对于插入/更新/删除,我可以使用如下
数据库层
Class BillingMaster
{
public int BillId;
public double BillAmt;
public void save()
{
.....
}
public void update()
{
.....
}
}
Class BillingDetatil
{
public int BillId;
public string Item;
public double Amount;
public void save()
{
.....
}
public void update()
{
.....
}
}
我需要获取数据并以表格格式将它们加入 billingmst 和 billingdet。我需要在哪里给出连接查询?
---------我正在修改关于我从 Kayaman 和 Ali 获得的输入的问题----
我正在修改案例,就像我需要两个报告一样,比如客户明智的账单详细信息、某个日期范围内的账单
我也可以这样编码
BAL
class BALBill
{
public dataset getCustWiseBillDetails()
{
DBManager oDBM=new DBManager() //Class supporting db operations
String strsql="select CustId,CustName,BillNo,BillAmt,Item,Amount FROM CustMst cm"
strSql+="\n join BillingMst bm on bm.CustId=cm.CustId"
strSql+="\n join BillingDet bd on bm.BillNo=bd.BillNo"
retrun oDBM.fnExecute(strSQL);
}
public dataset getBillsInADateRange(DateTime dtFrom,DateTime dtTo)
{
DBManager oDBM=new DBManager() //Class supporting db operations
String strsql="select BillNo,BillAmt,Item,Amount FROM BillingMst bm on bm.CustId=cm.CustId"
strSql+="\n join BillingDet bd on bm.BillNo=bd.BillNo"
strSql+="\n where BillDate between " + dtFrom " and " + dtTo
retrun oDBM.fnExecute(strSQL);
}
public sub SaveBillMst(BillingMst bM)
{
DBManager oDBM=new DBManager() //Class supporting db operations
String strsql="insert into BillingMst(BillNo,BillAmt)"
strsql+="\n values(" + bM.BillNo + ", " +bM.BillAmt+")"
oDBM.fnExecuteNonQuery(strSQL);
}
public sub SaveBillMst(List<BillingMst> bLM)
{
DBManager oDBM=new DBManager() //Class supporting db operations
foreach(BillingMst bM in BLM)
{
String strsql="insert into BillingMst(BillNo,BillAmt)"
strsql+="\n values(" + bM.BillNo + ", " +bM.BillAmt+")"
oDBM.fnExecuteNonQuery(strSQL);
}
}
public sub SaveBillDet(BillingDet bD)
{
DBManager oDBM=new DBManager() //Class supporting db operations
String strsql="insert into BillingMst(BillId,Item,Amount)"
strsql+="\n values(" + bD.BillNo + ", '" +bD.Item+"',"+bD.Amount+")"
oDBM.fnExecuteNonQuery(strSQL);
}
public sub SaveBillDet(List<BillingDet> bLD)
{
DBManager oDBM=new DBManager() //Class supporting db operations
foreach(BillingMst bD in bLD)
{
String strsql="insert into BillingMst(BillNo,BillAmt)"
strsql+="\n values(" + bM.BillNo + ", " +bM.BillAmt+")"
oDBM.fnExecuteNonQuery(strSQL);
}
}
public sub SaveBill(DALBill b)
{
saveBillMst(b.bM);
saveBillDet(b.bLD);
}
public sub SaveBill(List<DALBill> bL)
{
foreach(DALBill b in bL)
{
saveBillMst(b.bM);
saveBillDet(b.bLD);
}
}
}
DAL
class BillingMst
{
public int BillId;
public double BillAmt;
}
class BillingDet
{
public int BillId;
public string Item;
public double Amount;
}
class DALBill
{
public BillingMst bM;
public List<BillingDet> bLD;
}
我走对了吗?
【问题讨论】:
-
这完全不相关,但是当你使用缩写“e.g.”时,它的意思是“for example”(千万不要说“for e.g.”)。
-
完全不相关是什么意思? “我的帖子发错地方了”或“我在说不相关的事情?我有一个不遵循任何标准的库存软件。我正在尝试融入架构,因为厌倦了一遍又一遍地输入相同的代码。但是要显示东西我必须使用网格。那时会有很多加入,就像某些项目可能从 challan 收取一样。有些项目将从计费等中获得回报。所有这些地方我需要使用“sql joins”来查找数据库中的内容?我的问题是这些操作在我的代码中的什么位置?
-
我是说我的评论完全不相关——它与您的问题无关,与您的措辞有关。为了将来参考,当你说“例如”时,你应该用“例如”来代替,当你说“即”时。您应该替换“就是”这个词 - 如果这些替换没有语法或语义意义,那么您使用它们不正确(我对“即”有很多内疚)。
标签: c# java sql architecture 3-tier