[英]ASP.NET C# Data Access Layer function issue
我在.NET站点中使用3层体系结构。 目前,在我的DAL(数据访问层)中,我具有“加载”,“更新”,“插入”和“删除”功能,一切正常。 但是,我现在想创建一个函数来通过电子邮件地址获取数据。
以下是我的数据访问层中的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();
}
}
接下来是我的业务访问层:
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;
}
}
加载和插入是非常标准的工作。 但是, getByEmailAddress
配置不正确。 我尝试从加载和插入中混合代码,但未成功。 谁能给我一个提示,想法或解决此问题的方法,以便我可以使用getByEmailAddress
顺便说一句,该功能应该命中一个存储过程,该存储过程通过发送任何emailAddress输入来收集所有信息。
提前致谢!
您的业务层正在为GetByEmailAddress返回一个数据表,但是您的数据访问层正在为GetByEmailAddress返回一个int。 您是否不想在DAL中使用:
public DataTable GetByEmailAddress(AdministratorsBO administrator)
并且返回值更改为:
return dSet.Tables["AdministratorsTable"];
从业务层引用,您应该返回一个数据表,而不是整数
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];
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.