У меня проблема с использованием SqlBulkCopy, когда задействованы столбцы, допускающие значение NULL. Похоже, что SqlBulkCopy не знает, как работать со столбцами, допускающими значение NULL, и выдает ошибку недопустимого размера при обнаружении столбца нулевой длины. Ошибка: «Получена недопустимая длина столбца от клиента bcp ...»
Мне интересно, как лучше всего с этим справиться. Это кажется быть хорошим сообщением на форуме, описывающим эту проблему и способы ее решения при чтении файла csv.
Я думаю, что моя ситуация довольно проста и типична. Мне нужно переместить неизвестное количество данных из одной таблицы базы данных в другую. Более простым ответом для меня было бы использование SSIS / DTS или связанных серверов на сервере sql, однако клиент хочет, чтобы приложение выполняло перемещение данных.
Есть ли способ обойти это или лучшее решение для перемещения данных с полями, допускающими значение NULL?
//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 );