Ich programmiere schon eine Weile, betrachte mich aber immer noch als Anfängerin. Ich verwende sehr einfache ADO.NET-Klassen mit eingebauten SQL-Anweisungen. Ich würde gerne von der Community erfahren, was ich falsch mache und wie ich mich verbessern kann, und was die vorgeschlagenen nächsten Schritte sind, um meine Kodierung an die aktuellen Standards anzupassen.
Ich bin wirklich daran interessiert, EF auszuprobieren, obwohl ich kein Tutorial finden kann, das zu meiner Art des BLL- und DAL-Unterrichts passt.
Grundsätzlich, wenn ich eine Gabe habe, würde ich eine Gabe-Klasse erstellen (BLL \Gift.cs ) :
using MyProject.DataAccessLayer;
namespace MyProject.BusinessLogicLayer
{
public class Gift
{
public int GiftID { get; set; }
public string GiftName { get; set; }
public string Description { get; set; }
public decimal Price { get; set; }
public static Gift GetGiftByID(int GiftID)
{
GiftDAL dataAccessLayer = new GiftDAL();
return dataAccessLayer.GiftsSelectByID(GiftID);
}
public void DeleteGift(Gift myGift)
{
GiftDAL dataAccessLayer = new GiftDAL();
dataAccessLayer.DeleteGift(myGift);
}
public bool UpdateGift(Gift myGift)
{
GiftDAL dataAccessLayer = new GiftDAL();
return dataAccessLayer.UpdateGift(myGift);
}
public int InsertGift(string GiftName, string Description, decimal Price)
{
Gift myGift = new Gift();
myGift.GiftName = GiftName;
myGift.Description = Description;
myGift.Price = Price;
GiftDAL dataAccessLayer = new GiftDAL();
return dataAccessLayer.InsertGift(myGift);
}
}
}
Ich habe dann eine DAL-Klasse, die meine Verbindungszeichenfolge enthält (DAL \sqlDAL.css ) :
namespace MyProject.DataAccessLayer
{
public class SqlDataAccessLayer
{
public readonly string _connectionString = string.Empty;
public SqlDataAccessLayer()
{
_connectionString = WebConfigurationManager.ConnectionStrings["SQLConnectionString"].ConnectionString;
if (string.IsNullOrEmpty(_connectionString))
{
throw new Exception("No database connection String found");
}
}
}
}
und dann eine DAL-Klasse (DAL \giftDAL.cs ), wo ich einige der Methoden (Aktualisieren und Löschen) gezeigt habe:
using MyProject.BusinessLogicLayer;
namespace MyProject.DataAccessLayer
{
public class GiftDAL : SqlDataAccessLayer
{
public bool UpdateGift(Gift GifttoUpdate)
{
string UpdateString = "";
UpdateString += "UPDATE Gifts SET";
UpdateString += "GiftName = @GiftName";
UpdateString += ",Description = @Description ";
UpdateString += ",Price = @Price ";
UpdateString += " WHERE GiftID = @GiftID";
int RowsAffected = 0;
try
{
using (SqlConnection con = new SqlConnection(_connectionString))
{
using (SqlCommand cmd = new SqlCommand(UpdateString, con))
{
cmd.Parameters.AddWithValue("@GiftName", GifttoUpdate.GiftName);
cmd.Parameters.AddWithValue("@Description", GifttoUpdate.Description);
cmd.Parameters.AddWithValue("@Price ", GifttoUpdate.Price);
cmd.Parameters.AddWithValue("@GiftID", GifttoUpdate.GiftID);
con.Open();
RowsAffected = cmd.ExecuteNonQuery();
}
}
}
catch (Exception ex)
{
Utils.LogError(ex.Message, ex.InnerException == null ? "N/A" : ex.InnerException.Message, ex.StackTrace);
}
return (RowsAffected == 1);
}
public void DeleteGift(Gift GifttoDelete)
{
string DeleteString = "";
DeleteString += "DELETE FROM GIFTS WHERE GIFTID = @GiftID";
try
{
using (SqlConnection con = new SqlConnection(_connectionString))
{
using (SqlCommand cmd = new SqlCommand(DeleteString, con))
{
cmd.Parameters.AddWithValue("@GiftID", GifttoDelete.GiftID);
con.Open();
cmd.ExecuteNonQuery();
}
}
}
catch (Exception ex)
{
Utils.LogError(ex.Message, ex.InnerException == null ? "N/A" : ex.InnerException.Message, ex.StackTrace);
}
}
}
}
Wie würden Sie mir also empfehlen, den Code zu verbessern (wenn ich weiterhin ADO.NET verwende) und was wäre mein nächster Schritt, um EF zu lernen - oder gibt es eine bessere Alternative?
Zum Wohl, Robbie