Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Wie kopiere ich ein Varbinary-Feld von einer DB zu einer anderen DB?
Tossi65
myCSharp.de - Member



Dabei seit:
Beiträge: 58

Themenstarter:

Wie kopiere ich ein Varbinary-Feld von einer DB zu einer anderen DB?

beantworten | zitieren | melden

verwendetes Datenbanksystem: <MS SQL Server>

Hallo Leute,
ich brauche ein wenig Unterstützung. Ich habe mit in c# eine Datapump geschrieben. Ziel ist es Daten aus einer Produktiv DB in dein Test DB zu kopieren. Die Datenbankstruktur ist gleich.
Ich lese die Daten aus der Quell DB in mehrere Tables ein. Dann will ich die Daten von den Tables per SQL Parameter Query in die Ziel DB kopieren. Alles klappt super. Aber ich habe ein varbinary Feld dabei. Und da komme ich nicht weiter. Damit will es einfach nicht klappen.

Beispiel:


foreach(DataRow r in table.Rows)
{
   SQL.PARAMETER["binary"].Value = (byte[]) r["binary"];
...
}

Ich bekomme immer ein SQL Fehler wegen dem varbinary.

Danke und Frohe Weihnachten
Torsten
Danke Tossi
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



Dabei seit:
Beiträge: 1768
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

Warum nutzt du nicht SqlBulkCopy mit den DataTables?
Das dürfte um einiges einfacher sein als die Parameter Lösung.
Ansonsten müsstest du neben Value auch den Typen des Parameter mit angeben.

Nachtrag:
Das BulkCopy kannst du auch direkt mit einem SqlDataReader machen, dann sparst du dir eine Menge Speicher ein.
Dann werden die Daten direkt über den DataReader ausgelesen und per BulkCopy in die Ziel Datenbank geschrieben.

Ich habe sowas auch schon umgesetzt, da wir diesen Fall auch immer mal haben, dass wir Daten aus dem Produktiv System für Analyse Zwecke in unser Dev System kopieren müssen.

T-Virus
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von T-Virus am .
Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 3955

beantworten | zitieren | melden

Warum überhaupt ein eigenes Programm und nicht mit einem Migrationstool (bzw. per Import und Export)?
private Nachricht | Beiträge des Benutzers
Tossi65
myCSharp.de - Member



Dabei seit:
Beiträge: 58

Themenstarter:

beantworten | zitieren | melden

Guten Morgen,
danke für die Antworten. Leider habe ich noch nicht mit BUlkCopy gearbeitet.

WIe schon gesagt, die Anwendung hat die Daten schon im Speicher, auch die Binärdaten. Ich will diese einfach nur in eine Entwicklerdatenbank kopieren. Ich versuche es mal mit einem typisierten Parameter.
SOnst gehen mir die Optionen aus.

Mfg Torsten
Danke Tossi
private Nachricht | Beiträge des Benutzers
BerndFfm
myCSharp.de - Team

Avatar #avatar-3299.jpg


Dabei seit:
Beiträge: 3704
Herkunft: Frankfurt a.M.

beantworten | zitieren | melden

Mit Dataset und ADO.NET wäre das einfacher als wenn Du Dir die SQL Kommandos selber zusammenbaust :


r2["binary"] = (byte[]) r["binary"];

Ich kopiere Tabellen und Spalten auch einzeln wenn ich nicht weiß ob die Strukturen der beiden Datenbanken gleich sind oder wenn die Datenbanken von verschiedenem Typ sind (Anderes DBMS als Microsoft).

Grüße Bernd
Die kostenlose Unternehmenssoftware : Die Quasar-3 Community Version
Workshop : Datenbanken mit ADO.NET
private Nachricht | Beiträge des Benutzers