我正在使用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());
}
}
但是ProductDescription只读取255个字符,即使对于表tbl_TempProductData,我将长度设置为最大
答案 0 :(得分:0)
excel的OLEDB提供程序将尝试根据前8行数据自动确定DataTypes,可以使用连接字符串中的HDR = Yes / No属性进行设置。此外,它可以应用于文本列的多种类型。备注类型包含超过255个字符,因此如果前8行中没有任何字符,那么它将错误地设置数据类型。
更改此方法的方法是更改名为TypeGuessRows的注册表设置,如下所述:Microsoft Support
注意:TypeGuessRows键的有效值范围是0到16.但是,如果值为0,则扫描的源行数为16384.因此,如果您有一个非常大的文件,请确保最大的行是第一
答案 1 :(得分:0)
这是我的连接字符串。 我认为扩展的财产可以帮助你..
var connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"", fileName);