2009-07-08 5 views
0

Ich habe SQL Server 2008 und VS 2008 Pro. Und ich kodiere in C#. Ich akzeptiere eine Texteingabedatei vom Kunden und parse diese Daten in eine DataTable in meiner C# aspx.cs-Datei. Ich weiß, dass das richtig funktioniert. Also habe ich die DataTable ausgefüllt. Aber wie kann ich diese Daten in einen SP laden? Wie kann ich einen dynamischen Tabellenparameter verwenden? Oder sollte ich stattdessen XML verwenden?Loading DataTable in SP

Das Problem besteht darin, dass die Anzahl der erforderlichen Spalten abhängig von der Tabelle variieren kann, in die sie eingefügt werden sollen. Die Details sind: Ich lasse den Benutzer auswählen, an welche Tabelle er Daten anhängen möchte. Der Einfachheit halber wollen wir sagen: TABLE_NAME NUM_COLS A 2 B 3 C 4

Und lassen Sie uns auch davon ausgehen, dass die erste Spalte in jeder von ihnen ist ein INT Primärschlüssel. Also, wenn sie Tabelle B wählen, dann würde DataTable in etwa so aussehen: PK C1 C2 C3 1 'd' 'e' '3/10/99' 2 'g' 'h' '4/10/99'

Jetzt möchte ich diese Daten oben in Tabelle B in meiner AdventureWorks DB anfügen. Was ist der einfachste Weg, dies sowohl in der SP-Definition als auch in dem C# -Code, der diesen SP aufruft, zu implementieren? Vielen Dank!

Antwort

1

Ich glaube, ich verstehe, was Sie fragen. Ich gehe davon aus, dass jede Zeile Ihres Datenimports direkt/sauber einer Tabelle in der Datenbank zugeordnet wird. Ich gehe auch davon aus, dass Ihre Anwendungslogik bestimmen kann, wo jede Datenzeile persistiert werden soll.

Das heißt, ich schlage vor, mit jeder Zeile der .NET DataTable einzeln zu arbeiten, anstatt die Daten in Massen an SQL als eine einzige gespeicherte Prozedur Parameter und dann abhängig von SQL zu Datenanalyse und Tabellenzuordnung übergeben.

Durchlaufen Sie im Grunde Ihre DataTable, bestimmen Sie den Datentyp und führen Sie die entsprechende Einfügung für jede Zeile aus. Ich hoffe das hilft.

+0

Danke, Ben. Das macht Sinn für mich. Alle deine Annahmen treffen auf meinen Code zu. Kennen Sie einige gute Online-Beispiele dafür, die ich für ein Modell dieser Methode prüfen kann? – salvationishere

+0

Ich würde vorschlagen, jede Datenzeile zu analysieren, um den "Typ" zu bestimmen. Ich würde dann mit einer grundlegenden switch-Anweisung gehen oder das Strategy Pattern verwenden, um Ihre Datenaktualisierungen basierend auf der Zeile "type" zu behandeln. Grundsätzlich wird jeder Fall eine andere SQL-Routine ausführen. Wenn Sie weitere Informationen zum Strategie-Muster wünschen, beginnen Sie mit Jeremy Millers Artikel: http://codebetter.com/blogs/jeremy.miller/archive/2006/04/11/142665.aspx. Viel Glück. –