如何使用asp.net上传Excel工作表并知道工作表中列的结构,以便使用sqlbulkcopy将上传到具有类似工作表的表格结构体。使用oledb上传指定工作表名称的Excel工作表
任何答案将不胜感激。
在此先感谢。
如何使用asp.net上传Excel工作表并知道工作表中列的结构,以便使用sqlbulkcopy将上传到具有类似工作表的表格结构体。使用oledb上传指定工作表名称的Excel工作表
任何答案将不胜感激。
在此先感谢。
我假设你知道如何做上传部分,所以我专注于Excel部分。
有很多第三方工具可以读取.NET中的Excel文件,根据我的经验,这比使用.NET开箱即用的功能更灵活。但是这里有一个方法可以做到这一点:
DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.OleDb");
using (DbConnection connection = factory.CreateConnection())
{
connection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyExcel.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1";
connection.Open();
using (DbCommand command = connection.CreateCommand())
{
command.CommandText = "SELECT * FROM [Sheet1$]";
using (DbDataReader dr = command.ExecuteReader())
{
while (dr.Read())
{
/* read data here */
}
}
}
}
请记住:
喷气OLE DB提供程序读取注册表项来确定多少行是要读取猜测的类型源列。注册表设置为:HKLM \ Software \ Microsoft \ Jet \ 4.0 \ Engines \ Excel \ TypeGuessRows。默认情况下,此键的值为8.因此,提供程序扫描源数据的前8行以确定列的数据类型(请参阅http://support.microsoft.com/kb/281517)TypeGuessRows键的有效值范围为0到16。但是,如果值为0,则扫描的源行数为16384.
在64位系统上,Microsoft.Jet.OLEDB.4.0驱动程序当前不受支持。
有关连接字符串中使用的参数的详细信息请看这里:http://www.connectionstrings.com/excel
“HDR =是”在连接字符串中表示该供应商将不包括单元格区域的第一行(其可能是一个标题行)在RecordSet中。因此,如果标题行为您提供了需要构建sqlbulkcopy命令的信息,则应将其设置为“HDR = No”。
感谢您的回复,我想知道表中的表的模式,以便我可以创建一个具有相同列的精确表,以便它可以很容易地使用SqlBulkcopy。 – 2011-06-17 11:48:54