.net中excel程序导入数据库

这篇博客讲述了在ASP.NET环境中,从Excel文件导入数据到数据库时遇到的问题及解决方案。作者在尝试打开Excel文件连接时出现错误,提示外部表不是预期的格式。通过检查发现,连接字符串指定的Excel版本不正确,修正为适合Excel2007的连接字符串后,问题得到解决。此外,还分享了用于读取Excel文件的代码片段,并提到了.csv格式数据文件导入数据库可能存在的问题。
摘要由CSDN通过智能技术生成
(1)如果遇到“ 未在本地计算机上注册Microsoft.ACE.OLEDB.12.0提供程序”这种异常:
解决办法:
在对应的 IIS 应用程序池中,“设置应用程序池默认属性”右击/“高级设置”/"启用32位应用程序",设置为 true。
(2)如果遇到“ 导入excel错误:外部表不是预期的格式“ 解决方案:

在asp.net网站中导出Excel文件后,再把文件导入到数据库中。 读取Excel文件时,打开连接出错。

错误为:外部表不是预期的格式

解决:检查了一下,导出的Excel是标准文件不是html,没错,Excel文件正常。 

  调试代码,创建连接对象oleDbConnection也正常,但在conn.Open()打开链接时出错。 

仔细看了下链接字符串,检查出了错误,Excel版本问题,Exce连接字符串版本是office2003的 ,更改为Excel2007版本则正常导入。 

(3).csv格式数据文件导入数据库出现问题:

这段出错,'G:\zxb\test\Test\create20091225.csv'不是一个有效的路径。 确定路径名称拼写是否正确,以及是否连接到文件存放的服务器。

解决办法:

将filepath改为:
Directory.GetParent(filepath)

          


总结规则如下:

using System.Data.OleDb;

using System.Data;


 public void ReadExcelFiless()

        {

            //string strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + Server.MapPath("ExcelFiles/MyExcelFile.xls") + ";Extended Properties='Excel 8.0; HDR=Yes; IMEX=1'"; //此连接只能操作Excel2007之前(.xls)文件

            string strConn = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + Server.MapPath("ExcelFiles/Mydata2007.xlsx") + ";Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'"; //此连接可以操作.xls与.xlsx文件 (支持Excel2003 和 Excel2007 的连接字符串)

//备注: "HDR=yes;"是说Excel文件的第一行是列名而不是数据,"HDR=No;"正好与前面的相反。

//      "IMEX=1 "如果列中的数据类型不一致,使用"IMEX=1"可必免数据类型冲突。 


            OleDbConnection conn = new OleDbConnection(strConn);

            OleDbDataAdapter adp = new OleDbDataAdapter("Select * from [Sheet1$]", conn);

            DataSet ds = new DataSet();

            adp.Fill(ds, "Book1");

            this.GridView1.DataSource = ds.Tables["Book1"].DefaultView;

            this.GridView1.DataBind(); 

        }


具体代码:
   public void BtnImport_Click(object sender, System.EventArgs e)
        {
            string filename = string.Empty;
            try
            {
                filename = UpLoadXls(FileExcel);//上传XLS文件
                ImportXlsToData(filename);//将XLS文件的数据导入数据库                
                if (filename != string.Empty && System.IO.File.Exists(filename))
                {
                    System.IO.File.Delete(filename);//删除上传的XLS文件
                }
                EventMessage.MessageBox(1, "操作成功", "保存成功!", Icon_Type.OK, "parent.location.reload();", UrlType.JavaScript);
                return;
            }
            catch (Exception ex)// + ex.ToString()
            {
                EventMessage.MessageBox(1, "操作失败", "保存失败!", Icon_Type.Error, "history.back();", UrlType.JavaScript);
                return;
            }
        }

    <summary>
        /// 从Excel提取数据--》Dataset
        /// </summary>
        /// <param name="filename">Excel文件路径名</param>
        private void ImportXlsToData(string fileName)
        {
            if (fileName == string.Empty)
            {
                throw new ArgumentNullException("Excel文件上传失败!");
            }
            string oleDBConnString = "";
            //string oleDBConnString = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + fileName + ";Extended Properties='Excel 8.0; HDR=YES; IMEX=1'";
            if (fileName.Contains("xls") || fileName.Contains("xlsx"))
            {
                oleDBConnString = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + fileName + ";Extended Properties='Excel 12.0; HDR=YES; IMEX=1'";
                OleDbConnection oleDBConn = null;
                OleDbDataAdapter oleAdMaster = null;
                DataTable m_tableName = new DataTable();
                DataSet ds = new DataSet();
                oleDBConn = new OleDbConnection(oleDBConnString);
                oleDBConn.Open();
                m_tableName = oleDBConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" });

                if (m_tableName != null && m
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值