Nein, es ist nicht sicher, Gießen nie sicher ist, und es kann jederzeit blasen, während die Anwendung ausgeführt wird. Während SqlConnection
tatsächlich von DbConnection
abgeleitet ist, können Sie nicht garantieren, dass database.CreateConnection()
eine SqlConnection
zurückgibt, da dies in der Konfigurationsdatei parametrisiert werden könnte. Warum musst du auch nach SqlConnection
casten? Es ist immer besser, mit Klassen zu arbeiten, die in der Hierarchie höher sind, um zu vermeiden, dass Ihr Code mit einer bestimmten Implementierung gekoppelt wird, die Ihren Code nicht isoliert testen lässt.
Während die EnterpriseLibrary einen anständig guten Job macht, die Dinge abstrakt zu halten, tötet man mit dieser Besetzung alles. Außerdem sollten Sie sicherstellen, dass verfügbare Ressourcen immer ordnungsgemäß entsorgt werden. Wie wäre es stattdessen:
Database database = DatabaseFactory.CreateDatabase("connection string");
using (var conn = database.CreateConnection())
using (var cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = "SELECT id FROM foo";
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
// TODO: work with the results here
}
}
}
Auf diese Weise ist Ihr Code weniger anfällig für Datenbankänderungen in der Konfigurationsdatei. Nun, natürlich haben Sie diese SQL-Codierung noch fest und es gibt ORMs, die sich um diese Situation kümmern werden. Sie ermöglichen es Ihnen auch, sich auf die reale Domäne Ihrer Anwendung zu konzentrieren, anstatt Zeit zu verschwenden, SQL-Abfragen zu schreiben und von einem Datenbankanbieter auf einen anderen zu übertragen. Aber für eine einfache Anwendung ist das in Ordnung.
Es gibt eine in diesem Code verwendete Methode, die SqlConnection als Parameter – Darqer