2016-05-31 7 views
0

Ich habe ein MVC-Razor-Projekt, und ich bin verpflichtet, es ohne Verwendung von ORM zu machen. Ich verwende nur SQL-Befehle, und in dem Add (Modell) Methode für die DB-Controller ich einen Query-String-Befehl in diesem Format ausführen:C# automatisieren Abfrage String

string queryString = 
       "INSERT INTO USERS VALUES(@EMAIL,@PAIS,@IDIOMA,@CODPROMO,@NOMBREUSU"+ 
       ",@PASS,@PIN,@TRATAMIENTO,@NOMBREPERS,@APELLIDOS,@FECHANAC,@DIRECCION,@NUMPISO"+ 
       ",@CP,@CIUDAD,@NIF,@NUMMOVIL,@SUBSCRIBIR,@CONDICIONES,@PRIVACIDAD)"; 

Wie Sie sehen, gibt es eine Menge Parameter sind in der Tabelle einzufügen . Dann muss ich diese @ Parameter mit command.Parameters.AddWithValue("@EMAIL",socio.Mail);

verknüpfen Gibt es einen schnelleren Weg, all dies zu tun (etwas dynamischer, vielleicht?) Ohne all das Schreiben?

+5

Kopie zu erstellen + Ich denke, fügen – Jonesopolis

+0

alle Parameter Eigenschaften in einer Klasse sind Angenommen, Sie Reflexion Schleife über die Klasse verwenden können, und erstellen Sie die Abfragezeichenfolge – JaredStroeb

+0

, warum erstellen Sie nicht eine gespeicherte Prozedur .. oder erstellen Sie eine Klasse, die die Struktur Ihrer Abfrage oder Abfragen imitiert .. – MethodMan

Antwort

3

Also jede schnellere Möglichkeit, dies ohne all das Schreiben zu tun?

Ja, wenn dies ist, was Sie haben tun, dann sollten Sie Ihren SQL-Code Refactoring und in ein stored procedure(SP) ziehen und dass die SP in Ihrem Code stattdessen nennen. Sie können auch eine Tabellenvariable verwenden, wenn Sie die strukturierten Daten senden möchten.

2

Hier ist ein schnelles Beispiel für die Reflektion zum Erstellen einer Abfragezeichenfolge. Die Idee ist, eine Klasse zu haben, die die Spalten der Tabelle widerspiegelt. Der folgende Code kann zum Erstellen einer Einfügung für eine beliebige Datenmodellklasse verwendet werden. Es wird die insert-Anweisung erstellen und die Parameter ausfüllen und dann die Anweisung ausführen.

Ich weiß nicht, ob ich diese Methode empfehlen würde, aber es ist eine interessante Verwendung der Reflexion.

Edited den Vorschlag von Alexei Levenkov

Edited reflektieren die Funktion allgemeineren

+0

Empfehlung SQL-Injektion ist keine gute Idee (vor allem ohne Warnungen). Ähnliche Sample-Parameter würden stattdessen Upvotes verdienen. –

+0

@Alexei Levenkov Ich habe die Änderungen vorgenommen, um SQL-Abfrageparameter zu verwenden. Meine ursprüngliche Antwort spiegelte die besten Praktiken nicht wider. – JaredStroeb

+0

Sieht gut aus, stellen Sie sicher, * Verwendung * von Parametern zu 'command' hinzuzufügen, um eine Zeichenkette zu erstellen, die der von OP ähnlich ist. –