Laden...

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

Erstellt von Tossi65 vor 3 Jahren Letzter Beitrag vor 3 Jahren 558 Views
T
Tossi65 Themenstarter:in
83 Beiträge seit 2010
vor 3 Jahren
Wie kopiere ich ein Varbinary-Feld von einer DB zu einer anderen DB?

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

T
2.219 Beiträge seit 2008
vor 3 Jahren

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

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.

4.931 Beiträge seit 2008
vor 3 Jahren

Warum überhaupt ein eigenes Programm und nicht mit einem Migrationstool (bzw. per Import und Export)?

T
Tossi65 Themenstarter:in
83 Beiträge seit 2010
vor 3 Jahren

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

3.825 Beiträge seit 2006
vor 3 Jahren

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

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3