Ich weiß, es gab zahlreiche Fragen hier über Inline-SQL vs gespeicherte Prozeduren ... Ich möchte nicht eine andere so starten! Dies ist über Inline (oder dynamische) SQL.Was sind die besten Praktiken zur Formatierung von Inline-SQL mit ADO.NET in C#
Ich weiß auch, dass dieser Punkt mehr oder weniger strittig mit Linq zu SQL und seinem Nachfolger Entity Framework geworden ist.
Aber ... Angenommen, Sie haben gewählt (oder werden von Ihren Vorgesetzten benötigt), um mit dem alten ADO.NET und inline (oder dynamisch) sql zu arbeiten. Was sind dann die besten Praktiken dafür und für die Formatierung der SQL?
Was ich jetzt mache, ist folgendes: Ich möchte meine SQL-Anweisungen zuerst in einer gespeicherten Prozedur erstellen. Dies gibt mir Syntaxfärbung in SQL Server Management Studio und die Möglichkeit, die Abfrage problemlos zu testen, ohne sie über die von mir entwickelte Anwendung im Code ausführen zu müssen.
Also, solange ich Umsetzung/Debugging, sieht mein Code wie folgt aus:
using (SqlConnection conn = new SqlConnection("myDbConnectionString"))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "myStoredProcName";
// add parameters here
using (SqlDataReader rd = cmd.ExecuteReader())
{
// read data and fill object graph
}
}
}
Sobald das Debugging und die Testphase abgeschlossen ist, ich den Code oben wie folgt zu ändern:
using (SqlConnection conn = new SqlConnection("myDbConnectionString"))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandType = CommandType.Text;
cmd.CommandText = GetQuery();
// add parameters here
using (SqlDataReader rd = cmd.ExecuteReader())
{
// read data and fill object graph
}
}
}
Und ich füge eine zusätzliche private Methode zB hinzu GetQuery()
, in dem ich Kopieren/den ganzen Block der gespeicherten Prozedur wie folgt ein:
private string GetQuery()
{
return @"
SET NOCOUNT ON;
SELECT col1, col2 from tableX where id = @id
-- more sql here
";
}
wie diese Arbeiten hat den Vorteil, dass ich den Code zurückkehren kann leicht wieder die gespeicherte Prozedur aufrufen, wenn ich zu debuggen/update haben der sql-code später, und sobald es fertig ist, kann ich den sql-code wieder mit copy/paste, , ohne zitate um jede zeile und so Zeug setzen.
Ist es eine gute Übung, Zeilenumbrüche in die Abfrage einzufügen?
Gibt es andere Dinge oder Tricks, an die ich nicht gedacht habe, die diesen Ansatz verbessern können?
Wie macht man so etwas?
Oder bin ich der einzige, der immer noch inline sql verwendet (muss verwenden)?
LINQ-zu-SQL ist ** nicht ** "offiziell tot"; es ist immer noch ein unterstütztes Produkt mit fortlaufender Entwicklung; EF konzentriert sich einfach auf neue Funktionen. –
Sorry war nur etwas zitieren ich in anderen Fragen hier gefunden ... entfernt es ;-) – fretje