ASP.NET C#数据访问层功能问题

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

我在.NET站点中使用的是三层体系结构。目前在我的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();
        }
    }
公共数据表加载()
{
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();