ASP.NET C#数据访问层功能问题
我在.NET站点中使用的是三层体系结构。目前在我的DAL(数据访问层)中,我有加载、更新、插入和删除功能,这些功能都可以正常工作。不过,我现在想创建一个函数,通过电子邮件地址获取数据 下面是驻留在我的数据访问层中的我的ASP.NET C#数据访问层功能问题,c#,asp.net,3-tier,C#,Asp.net,3 Tier,我在.NET站点中使用的是三层体系结构。目前在我的DAL(数据访问层)中,我有加载、更新、插入和删除功能,这些功能都可以正常工作。不过,我现在想创建一个函数,通过电子邮件地址获取数据 下面是驻留在我的数据访问层中的我的load、insert和getByEmailAddress public DataTable Load() { SqlConnection conn = new SqlConnection(MyGlobals.conString); Sql
load
、insert
和getByEmailAddress
public DataTable Load()
{
SqlConnection conn = new SqlConnection(MyGlobals.conString);
SqlDataAdapter dAd = new SqlDataAdapter("administratorGetAll", conn);
dAd.SelectCommand.CommandType = CommandType.StoredProcedure;
DataSet dSet = new DataSet();
try
{
dAd.Fill(dSet, "AdministratorsTable");
return dSet.Tables["AdministratorsTable"];
}
catch
{
throw;
}
finally
{
dSet.Dispose();
dAd.Dispose();
conn.Close();
conn.Dispose();
}
}
/// <summary>
/// Used to load records from database by email address
/// </summary>
public int GetByEmailAddress(AdministratorsBO administrator)
{
SqlConnection conn = new SqlConnection(MyGlobals.conString);
SqlCommand dCmd = new SqlCommand("administratorGetByEmailAddress", conn);
dCmd.CommandType = CommandType.StoredProcedure;
DataSet dSet = new DataSet();
try
{
dCmd.Parameters.AddWithValue("@emailAddress", administrator.EmailAddress);
SqlDataAdapter dAd = new SqlDataAdapter(dCmd);
dAd.Fill(dSet, "AdministratorsTable");
return Convert.ToInt32(dSet.Tables["AdministratorsTable"]);
}
catch
{
throw;
}
finally
{
dSet.Dispose();
conn.Close();
conn.Dispose();
}
}
/// <summary>
/// Used to insert records into database
/// </summary>
public int Insert(AdministratorsBO administrator)
{
SqlConnection conn = new SqlConnection(MyGlobals.conString);
conn.Open();
SqlCommand dCmd = new SqlCommand("administratorInsert", conn);
dCmd.CommandType = CommandType.StoredProcedure;
try
{
dCmd.Parameters.AddWithValue("@userName", administrator.UserName);
dCmd.Parameters.AddWithValue("@emailAddress", administrator.EmailAddress);
dCmd.Parameters.AddWithValue("@password", administrator.Password);
dCmd.Parameters.AddWithValue("@firstName", administrator.FirstName);
dCmd.Parameters.AddWithValue("@lastName", administrator.LastName);
dCmd.Parameters.AddWithValue("@isActive", administrator.IsActive);
return dCmd.ExecuteNonQuery();
}
catch
{
throw;
}
finally
{
dCmd.Dispose();
conn.Close();
conn.Dispose();
}
}
公共数据表加载()
{
SqlConnection conn=新的SqlConnection(MyGlobals.consting);
SqlDataAdapter dAd=新的SqlDataAdapter(“administratorGetAll”,conn);
dAd.SelectCommand.CommandType=CommandType.StoredProcess;
数据集dSet=新数据集();
尝试
{
dAd.Fill(数据集,“管理员表”);
返回数据集表[“管理员表”];
}
抓住
{
投掷;
}
最后
{
dSet.Dispose();
爸爸;
康涅狄格州关闭();
conn.Dispose();
}
}
///
///用于按电子邮件地址从数据库加载记录
///
public int GetByEmailAddress(管理员BO管理员)
{
SqlConnection conn=新的SqlConnection(MyGlobals.consting);
SqlCommand dCmd=新的SqlCommand(“administratorGetByEmailAddress”,conn);
dCmd.CommandType=CommandType.StoredProcess;
数据集dSet=新数据集();
尝试
{
dCmd.Parameters.AddWithValue(“@emailAddress”,administrator.emailAddress);
SqlDataAdapter dAd=新的SqlDataAdapter(dCmd);
dAd.Fill(数据集,“管理员表”);
返回Convert.ToInt32(数据集表[“管理员表]);
}
抓住
{
投掷;
}
最后
{
dSet.Dispose();
康涅狄格州关闭();
conn.Dispose();
}
}
///
///用于将记录插入数据库
///
公共整数插入(管理员BO管理员)
{
SqlConnection conn=新的SqlConnection(MyGlobals.consting);
conn.Open();
SqlCommand dCmd=新的SqlCommand(“管理员插入”,conn);
dCmd.CommandType=CommandType.StoredProcess;
尝试
{
dCmd.Parameters.AddWithValue(“@userName”,administrator.userName);
dCmd.Parameters.AddWithValue(“@emailAddress”,administrator.emailAddress);
dCmd.Parameters.AddWithValue(“@password”,administrator.password);
dCmd.Parameters.AddWithValue(“@firstName”,administrator.firstName);
dCmd.Parameters.AddWithValue(“@lastName”,administrator.lastName);
dCmd.Parameters.AddWithValue(“@isActive”,administrator.isActive);
返回dCmd.ExecuteNonQuery();
}
抓住
{
投掷;
}
最后
{
dCmd.Dispose();
康涅狄格州关闭();
conn.Dispose();
}
}
接下来是我的业务访问层:
public DataTable Load()
{
AdministratorsDAL aDAL = new AdministratorsDAL();
try
{
return aDAL.Load();
}
catch
{
throw;
}
finally
{
aDAL = null;
}
}
/// <summary>
/// Load records from database
/// </summary>
/// <returns></returns>
public DataTable GetByEmailAddress(AdministratorsBO administrator)
{
AdministratorsDAL aDAL = new AdministratorsDAL();
try
{
return aDAL.GetByEmailAddress(administrator);
}
catch
{
throw;
}
finally
{
aDAL = null;
}
}
/// <summary>
/// Insert records into database
/// </summary>
/// <param name="person"></param>
public int Insert(AdministratorsBO administrator)
{
AdministratorsDAL aDAL = new AdministratorsDAL();
try
{
return aDAL.Insert(administrator);
}
catch
{
throw;
}
finally
{
aDAL = null;
}
}
公共数据表加载()
{
AdministratorsDAL aDAL=新AdministratorsDAL();
尝试
{
返回aDAL.Load();
}
抓住
{
投掷;
}
最后
{
aDAL=null;
}
}
///
///从数据库加载记录
///
///
公共数据表GetByEmailAddress(管理员BO管理员)
{
AdministratorsDAL aDAL=新AdministratorsDAL();
尝试
{
返回aDAL.GetByEmailAddress(管理员);
}
抓住
{
投掷;
}
最后
{
aDAL=null;
}
}
///
///将记录插入数据库
///
///
公共整数插入(管理员BO管理员)
{
AdministratorsDAL aDAL=新AdministratorsDAL();
尝试
{
返回aDAL.Insert(管理员);
}
抓住
{
投掷;
}
最后
{
aDAL=null;
}
}
加载和插入是相当标准和有效的。但是,getByEmailAddress
配置不正确。我尝试混合加载和插入的代码,但没有成功。有人能给我一个提示、想法或一些东西来解决这个问题,这样我就可以使用getByEmailAddress
顺便说一下,该函数应该命中一个存储过程,该存储过程通过发送emailAddress输入来收集所有信息
提前谢谢 您的业务层正在为GetByEmailAddress返回DataTable,但您的数据访问层正在为GetByEmailAddress返回int。你不想在你的DAL中:
public DataTable GetByEmailAddress(AdministratorsBO administrator)
报税表改为:
return dSet.Tables["AdministratorsTable"];
您的业务层正在为GetByEmailAddress返回DataTable,但您的数据访问层正在为GetByEmailAddress返回int。你不想在你的DAL中:
public DataTable GetByEmailAddress(AdministratorsBO administrator)
报税表改为:
return dSet.Tables["AdministratorsTable"];
从业务层开始,您应该返回一个datatable,而不是整数
public DataTable GetByEmailAddress(AdministratorsBO administrator)
{
Using (SqlConnection conn = new SqlConnection(MyGlobals.conString))
{
SqlCommand dCmd = new SqlCommand("administratorGetByEmailAddress", conn);
dCmd.CommandType = CommandType.StoredProcedure;
DataSet dSet = new DataSet();
dCmd.Parameters.AddWithValue("@emailAddress", administrator.EmailAddress);
SqlDataAdapter dAd = new SqlDataAdapter(dCmd);
dAd.Fill(dSet);
return dSet.Tables[0];
}
}
从业务层开始,您应该返回一个datatable,而不是整数
public DataTable GetByEmailAddress(AdministratorsBO administrator)
{
Using (SqlConnection conn = new SqlConnection(MyGlobals.conString))
{
SqlCommand dCmd = new SqlCommand("administratorGetByEmailAddress", conn);
dCmd.CommandType = CommandType.StoredProcedure;
DataSet dSet = new DataSet();
dCmd.Parameters.AddWithValue("@emailAddress", administrator.EmailAddress);
SqlDataAdapter dAd = new SqlDataAdapter(dCmd);
dAd.Fill(dSet);
return dSet.Tables[0];
}
}
定义“未正确配置”。它如何不工作?当您调试到它时,它在哪里失败?不需要catch{throw;}语句。请详细说明发生的错误以及它在哪里抛出(在BusinessLayer或DAL中)?在BAL中,不需要try/catch/finally。注意,aDAL=null,不做任何事情。只需返回(newadministratorsdal()).Load();定义“未正确配置”。它如何不工作?当您调试到它时,它在哪里失败?不需要catch{throw;}语句。请详细说明发生的错误以及它在哪里抛出(在BusinessLayer或DAL中)?在BAL中,不需要try/catch/finally。注意,aDAL=null,不做任何事情。只需返回(newadministratorsdal()).Load();