在三层架构中使用BAL?如何从DAL调用方法到BAL
我是3层体系结构的新手,下面是我的DAL代码
public static int Insert(string firstname, string lastname, DateTime dob, string gender,string email, string password)
{
// bool flag = false;
SqlParameter pid;
SqlParameter result;
SqlConnection con = Generic.DBConnection.OpenConnection();
try
{
SqlCommand cmd1 = new SqlCommand("Insertreg", con);
cmd1.CommandType = CommandType.StoredProcedure;
cmd1.Parameters.AddWithValue("@FirstName", firstname);
cmd1.Parameters.AddWithValue("@LastName", lastname);
cmd1.Parameters.AddWithValue("@Dob", dob);
cmd1.Parameters.AddWithValue("@Gender", gender);
cmd1.Parameters.AddWithValue("@EmailId", email);
cmd1.Parameters.AddWithValue("@Password", password);
result = cmd1.Parameters.Add("@result", System.Data.SqlDbType.Int);
result.Direction = System.Data.ParameterDirection.Output;
pid = cmd1.Parameters.Add("@id", System.Data.SqlDbType.Int);
pid.Direction = System.Data.ParameterDirection.Output;
return cmd1.ExecuteNonQuery();
con.Close();
}
catch (Exception ex)
{
throw ex;
}
}
这在BAL中
public int insert(string firstname,string lastname,DateTime dob,string gender,string email,string password)
{
ProfileMasterDAL dal=new ProfileMasterDAL();
try
{
return ProfileMasterDAL.Insert(firstname, lastname, dob, gender,email, password);
}
catch (Exception ex)
{
throw ex;
}
finally
{
dal = null;
}
}
我的用户界面
ProfileMasterBLL pmBLL = new ProfileMasterBLL();
pmBLL.insert(firstname, lastname, dob, gender, mobile, country, state, email, password);
这是3层代码的正确方法吗?我的意思是如何从DAL调用方法到BAL和UI?如果不是建议我一些好方法。谢谢。
通常我会做以下事情:
参考资料如下:
对你来说,最大的问题可能是,BL在不知道DAL时如何检索/保存/删除数据,因此无法在DAL中创建类的实例。 那么,这是一个小小的依赖注入派上用场的地方。 所有你必须连接的是DAL-class到BL接口的注入。
希望这是有道理的。 我将它用作我的标准3层实现,它的工作原理完全没有问题。 具体来说,我使用实体框架和POCO实体,而我使用的DI是一个自定义的实体框架,但其中的任何一个都可以。
UPDATE
BL不知道DAL。
我希望这更有意义。
你可以为以下三层架构的示例代码: -
CLASS - BAL.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Collections;
public class BAL
{
DAL objDAL;
public BAL()
{
}
public string _Name;
public string Name
{
get { return _Name; }
set { _Name = value; }
}
public int insert()
{
objDAL = new DAL();
int val = 0;
try
{
Hashtable objHash = new Hashtable();
objHash.Add("@Name", Convert.ToString(_Name));
val = objDAL.Insert("Your SP Name", objHash);
}
catch (Exception ex)
{
throw ex;
}
finally
{
objDAL = null;
}
return val;
}
}
CLASS - DAL.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Collections;
public class DAL : IDisposable
{
SqlConnection con;
public DAL()
{
con = new SqlConnection("Connection String");
}
public int Insert(string CMD, Hashtable objHash)
{
int val = 0;
try
{
SqlCommand cmd1 = new SqlCommand(CMD, con);
cmd1.CommandType = CommandType.StoredProcedure;
foreach (DictionaryEntry de in objHash)
{
cmd1.Parameters.AddWithValue(Convert.ToString(de.Key), Convert.ToString(de.Value));
}
con.Open();
val = cmd1.ExecuteNonQuery();
}
catch (Exception ex)
{
throw ex;
}
finally
{
con.Close();
}
return val;
}
#region IDisposable Members
public void Dispose()
{
throw new NotImplementedException();
}
#endregion
}
用户界面: -
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
BAL objBAL;
protected void Page_Load(object sender, EventArgs e)
{
Insert();
}
public void Insert()
{
int val = 0;
objBAL = new BAL();
objBAL.Name = "stackoverflow";
try
{
val = objBAL.insert();
}
catch { }
finally
{
objBAL = null;
}
if (val != 0)
{
//Insert sucessful
}
else
{
//Error in Insert.
}
}
}
希望这将有助于充分。
它可以帮助你看到一些实际的代码。 我建议你下载NetTiers,根据你的数据库模式运行它,并查看输出代码的实现细节。
链接地址: http://www.djcxy.com/p/82127.html上一篇: Use of BAL in 3 tier architecture?How to call methods from DAL to BAL