sqlbulkcopy通过ACE.OLEDB从Excel将文本截断为255个字符
使用SqlBulkCopy直接导入:sqlbulkcopy通过ACE.OLEDB从Excel将文本截断为255个字符,excel,oledb,sqlbulkcopy,Excel,Oledb,Sqlbulkcopy,使用SqlBulkCopy直接导入: string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1;\""; using (OleDbConnection excelConnection = new OleDbConnection(excelConnectionSt
string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1;\"";
using (OleDbConnection excelConnection = new OleDbConnection(excelConnectionString))
{
excelConnection.Open();
OleDbCommand cmd = new OleDbCommand("Select " + fileID.ToString() + " as [FileID], * from [Sheet1$] where [Text] IS NOT NULL", excelConnection);
OleDbDataReader dReader = cmd.ExecuteReader();
using (SqlBulkCopy sqlBulk = new SqlBulkCopy(ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString))
{
sqlBulk.DestinationTableName = "table_name";
sqlBulk.ColumnMappings.Add(0, "FileID");
sqlBulk.ColumnMappings.Add(4, "Author");
sqlBulk.ColumnMappings.Add(3, "Title");
sqlBulk.ColumnMappings.Add(1, "Body");
sqlBulk.ColumnMappings.Add(2, "PublishedDate");
sqlBulk.BulkCopyTimeout = 600;
sqlBulk.WriteToServer(dReader);
}
}
数据输入,没问题。除了映射到Body(nvarchar(max))的第一列被截断为255个字符之外。我环顾四周,找到了一些涉及到的解决方法的参考资料。将值设置为0以强制进行完全扫描,而不仅仅是前8行(这是Excel的默认值),但即使在重新启动后也没有帮助。寻找其他想法。谢谢。我使用ODBC而不是OLEDB,它不会截断值 到255个符号:
OdbcConnection con = new OdbcConnection(@"Driver={Microsoft Excel Driver
(*.xls)};DBQ=c:\temp\testbook.xls");
OdbcCommand cmd = new OdbcCommand(@"SELECT * FROM [Workbook1$]");
cmd.Connection = con;
OdbcDataAdapter da = new OdbcDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
您可以使用2007格式驱动程序访问XLSX文件:
.... <代码>驱动程序={Microsoft Excel驱动程序(*.xls,*.xlsx,*.xlsm,*.xlsb)}…我不确定这是否对您有帮助,但您可能会使用Excel工作表的单元格格式,但没有帮助。我将列类型设置为text。同样的结果。