Problème de fonction de couche d'accès aux données ASP.NET C #
Question
J'utilise l'architecture à 3 niveaux dans mon site .NET.Actuellement dans mon DAL (Data Access Layer), j'ai Load, Update, Insert and Delete qui fonctionne très bien.Cependant, je souhaite maintenant créer une fonction pour saisir des données par une adresse e-mail.
Voici mon load
, insert
et getByEmailAddress
qui résident dans ma couche d'accès aux données
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();
}
}
Vient ensuite ma couche d'accès professionnel:
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;
}
}
Le chargement et l'insertion sont assez standard et fonctionnent.Cependant, le getByEmailAddress
n'est pas configuré correctement.J'ai essayé de mélanger le code de la charge et de l'insertion mais j'ai échoué.Quelqu'un peut-il me donner un indice, une idée ou quelque chose qui permettrait de résoudre ce problème afin que je puisse utiliser getByEmailAddress
À propos, cette fonction est censée frapper une procédure stockée qui rassemble toutes les informations par quelle que soit l'entrée emailAddress envoyée.
Merci d'avance!
La solution
Votre couche métier renvoie un DataTable pour GetByEmailAddress, mais votre couche d'accès aux données renvoie un int pour GetByEmailAddress.Vous ne voulez pas dans votre DAL:
public DataTable GetByEmailAddress(AdministratorsBO administrator)
et le retour est devenu:
return dSet.Tables["AdministratorsTable"];
Autres conseils
En vous référant à votre couche de gestion, vous devriez renvoyer une table de données non un entier
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];
}
}