Konfus zwischen SqlCommand und SqlDataAdapter

9

jeder, ich bin ein Student und neu in .NET und speziell MVC3 Entwicklung, aber für eines meiner Projekte muss ich darüber arbeiten und so die Lernphase durchlaufen Problem und Verwirrung, mit der ich konfrontiert bin, betrifft DB-Connectivity, wenn ich in Bezug auf das Abrufen von Datensätzen aus einer Datenbank etwas Ähnliches sehe:

%Vor%

Aber während ich MSDN Library auscheckte, fand ich heraus dass SqlDataAdapter einen Konstruktor SqlDataAdapter (String, String) anbietet, der direkt einen SelectCommand und eine Verbindungszeichenfolge zum Initiieren annimmt und somit die Rolle von SqlCommand dazwischen wie folgt überspringt:

%Vor%

Sieht für mich kurz und hübsch aus, aber ich bin hier verwirrt, dass, wenn das auf diese Weise möglich ist, warum die meisten Bücher / Lehrer früher (SqlCommand) gehen.

  • Was ist eigentlich der Unterschied zwischen SqlCommand und SqlDataAdapter?
  • Welche Methode ist besser Eins oder Zwei?
  • Haben Sie Angst, dass ich in Methode zwei eine Verknüpfung verwende, die sich auf die Sicherheit oder die Leistung auswirken könnte?

Entschuldigung im Voraus, wenn ich sehr Neuling oder verschwommen klingen werde! Ich schätze jede Hilfe, die meine Konzepte aufklären könnte! Vielen Dank! :)

    
Maven 15.10.2011, 12:38
quelle

2 Antworten

7

Fehlercodes summierten es richtig:

  • SqlAdapter wird zum Füllen eines Datasets verwendet.
  • SqlCommand kann für jeden Zweck verwendet werden, den Sie im Zusammenhang mit dem Erstellen / Lesen / Aktualisieren / Löschen von Operationen, der Ausführung gespeicherter Prozeduren und vielem mehr im Sinn haben.

Zusätzlich:

  • SqlCommand KANN einen großen Vorteil gegenüber der Verwendung roher Zeichenketten in Bezug auf Sicherheit haben - sie können Sie vor SQL-Injektionen schützen. Verwenden Sie einfach Parameter für die vom Benutzer angegebenen Werte anstelle von string.Format (...).

Meine persönliche Präferenz besteht darin, ALLE SQL-Strings in SqlCommand zu verpacken und SqlParameters hinzuzufügen, um Sql-Injection durch böswillige Benutzer zu vermeiden.
Hinsichtlich der Leistung der beiden Ansätze - ich erwarte nicht, dass es einen Unterschied gibt. (Wenn jemand mir das Gegenteil beweisen kann - mach es!).
Daher würde ich vorschlagen, bei der längeren Variante 1 zu bleiben und bei Bedarf Befehle und Parameter zu verwenden.

Ein bisschen eine Randnotiz - Datasets und DataTables sind in letzter Zeit aufgrund von Linq2Sql und Entity Framework ein wenig aus dem Spiel.
Aber natürlich ist das Wissen von einfachen alten SqlCommands / Adaptern / Lesern willkommen:)

    
ViktorZ 15.10.2011 20:22
quelle
-6

Beeil dich! Wende dich auf LINQ !!!

Nicht mehr wie SQLDataset oder TableAdapters, keine offene Verbindung. Alles wird mit LINQ flüssiger.

LINQ-Beispiel:

dim result = von emp in myDataContext.Employees     wo emp.Salary & gt; 10000     Wählen Sie emp.ID, emp.SurName, ....

aus

myDatagrid.datasource = result.toList

Mit LINQ müssen Sie sich nicht um einfache Anführungszeichen oder crlf in Ihren Abfragen kümmern ...

Und Sie haben sogar Intellisense für die SQL-Tabellen, -Spalten und -Objekte!

    
Didier Levy 15.10.2011 21:11
quelle

Tags und Links