SQLBulkCopy 只读取 255 个字符。

3
我正在使用sqlbulkcopy类将Excel读入表格。
 string connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + targetFileName + ";Extended Properties=Excel 12.0;";
    //OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + targetFileName + @";Extended Properties=""Excel 8.0;IMEX=1;ImportMixedTypes=Text;HDR=YES;""");
    OleDbConnection con = new OleDbConnection(connStr);
    OleDbCommand myCommand = new OleDbCommand("SELECT * FROM [Sheet1$]", con);


    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(System.Configuration.ConfigurationManager.ConnectionStrings["CrossMediaConnectionString"].ToString()))
        try
        {
            {
                #region SqlBulkCopy
                bulkCopy.DestinationTableName = "tbl_TempProductData";

                bulkCopy.ColumnMappings.Add("product_code", "ProductCode");
                bulkCopy.ColumnMappings.Add("product_name", "ProductName");
                bulkCopy.ColumnMappings.Add("category_relation_id", "RelatedCategoryId");
                bulkCopy.ColumnMappings.Add("short_description", "ProductDescription");



       con.Open();

               bulkCopy.WriteToServer(myCommand.ExecuteReader());

    }
}

但是即使我已将 tbl_TempProductData 表的长度设置为最大值,ProductDescription 仍然只读取了 255 个字符。


可能是OLEDB提供程序截断了Excel单元格值的重复问题。 - Scott Chamberlain
2个回答

0

这是我的连接字符串。我认为扩展属性可能会对你有所帮助。

var connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"", fileName);

0

正如rmoore在这个答案中所说,

OLEDB提供程序会尝试根据前8行数据自动确定数据类型,可以使用连接字符串中的HDR=Yes/No属性进行设置。此外,它还可以将多种类型应用于文本列。备忘录类型可容纳超过255个字符,因此如果前8行中没有该类型,则会错误地设置数据类型。

更改此设置的方法是更改名为TypeGuessRows的注册表设置,如此处所述:Microsoft Support

注意:TypeGuessRows键的有效值范围为0到16。但是,如果值为0,则扫描的源行数为16384。因此,如果您有一个非常大的文件,请确保最大的行排在最前面。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接