当涉及空列时,我遇到了使用SqlBulkCopy的问题。这听起来像SqlBulkCopy不知道如何处理可空列,并在遇到长度为零的列时抛出非法大小的错误。错误是“从bcp客户端收到一个无效的列长度...”如何在可空列中使用SqlBulkCopy
我想知道处理这个问题的最佳做法是什么。 This似乎是一个很好的论坛帖子,描述了这个问题以及如何解决它读取csv文件。
我认为我的情况相当A - 典型和简单。我需要将一个未知数据从一个数据库表移动到另一个数据库。对我来说,更简单的答案是在SQL Server中使用SSIS/DTS或链接服务器,但客户希望应用程序执行数据移动。
是否有一个已知的解决方案,为这个或更好的蒸汽解决方案移动具有空字段的数据?
//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);
该列在数据库中标记为空。以上是在此表上执行的代码。 – Chad 2009-10-28 15:41:05