3 Stimmen

Wie verwendet man SqlBulkCopy mit nullbaren Spalten?

Ich habe ein Problem mit SqlBulkCopy, wenn nullable Spalten beteiligt sind. Es klingt wie SqlBulkCopy weiß nicht, wie man mit nullable Spalten zu behandeln und wirft eine illegale Größe Fehler, wenn es eine Null-Länge-Spalte begegnet. Der Fehler lautet "Es wurde eine ungültige Spaltenlänge vom bcp-Client empfangen..."

Ich frage mich, wie man am besten damit umgeht. Diese scheint ein guter Forumsbeitrag zu sein, der dieses Problem beschreibt und wie man es beim Lesen einer CSV-Datei löst.

Ich denke, meine Situation ist ziemlich A-typisch und einfach. Ich muss eine unbekannte Menge von Daten aus einer Datenbanktabelle in eine andere Datenbank verschieben. Die einfachere Antwort für mich wäre, SSIS/DTS oder verknüpfte Server in Sql Server zu verwenden, aber der Kunde will die App, um die Datenbewegung zu tun.

Gibt es ein bekanntes Workaround für dieses Problem oder eine bessere Dampflösung für das Verschieben von Daten mit löschbaren Feldern?

//access db
string src_db = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\SourceDB.mdb;Jet OLEDB ";
//sql db
string dest_db = @"Data Source=.\TEST;Initial Catalog=testdb;User Id=user;Password=password;";
string sql = "";
OleDbConnection sdb = new OleDbConnection( src_db );
OleDbCommand cmd = new OleDbCommand( sql, sdb );
OleDbDataReader rs = null;

SqlConnection db = new SqlConnection( dest_db );
SqlCommand clear = null;
SqlBulkCopy bulk_load = null;

// Read in the source table
sql = "select * from someTable";
sdb.Open();
cmd = new OleDbCommand( sql, sdb );
rs = cmd.ExecuteReader();

// Import into the destination table
bulk_load = new SqlBulkCopy( db );
bulk_load.DestinationTableName = "test";
bulk_load.WriteToServer( rs );

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X