[英]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.