0

.NETサイトで3層アーキテクチャを使用しています。現在、私のDAL(データアクセス層)には、ロード、更新、挿入、および削除があり、すべて正常に機能しています。ただし、メールアドレスでデータを取得する関数を作成したいと思います。

以下は私のloadinsertそして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入力が送信されるたびにすべての情報を収集するストアドプロシージャにヒットすることになっています。

前もって感謝します!

4

2 に答える 2

4

ビジネス レイヤーは GetByEmailAddress の DataTable を返しますが、データ アクセス レイヤーは GetByEmailAddress の int を返します。あなたのDALでしたくないですか:

public DataTable GetByEmailAddress(AdministratorsBO administrator)

戻り値は次のように変更されました。

return dSet.Tables["AdministratorsTable"];
于 2011-03-23T01:37:17.577 に答える
1

ビジネス層から参照すると、整数ではなくデータテーブルを返す必要があります

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];
    }
}
于 2011-03-23T01:38:24.597 に答える