当前位置: 代码迷 >> ASP.NET >> excel导入sql Server!异常:外部表不是预期的格式
  详细解决方案

excel导入sql Server!异常:外部表不是预期的格式

热度:1418   发布时间:2013-02-25 00:00:00.0
excel导入sql Server!错误:外部表不是预期的格式。
“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------

外部表不是预期的格式。 
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

异常详细信息: System.Data.OleDb.OleDbException: 外部表不是预期的格式。


网上查了好多!都说复制里面的内容到新建的Excel文件中再导入!

这样用户试用多麻烦!

我导出Excel的方法是通过HTTP输出流!
C# code
        //http文件流        public void CreateExcel(DataSet ds, string FileName)        {            HttpResponse resp;            resp = Page.Response;            resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");            resp.AppendHeader("Content-Disposition", "attachment;filename=" + FileName + ".xls");            string colHeaders = "", ls_item = "";            //定义表对象与行对象,同时用DataSet对其值进行初始化            DataTable dt = ds.Tables[0];            DataRow[] myRow = dt.Select();//可以类似dt.Select("id>10")之形式达到数据筛选目的            int i = 0;            int cl = dt.Columns.Count;            //取得数据表各列标题,各标题之间以t分割,最后一个列标题后加回车符            for (i = 0; i < cl; i++)            {                if (i == (cl - 1))//最后一列,加n                {                    colHeaders += dt.Columns[i].Caption.ToString() + "\n";                }                else                {                    colHeaders += dt.Columns[i].Caption.ToString() + "\t";                }            }            resp.Write(colHeaders);            //向HTTP输出流中写入取得的数据信息            //逐行处理数据             foreach (DataRow row in myRow)            {                //当前行数据写入HTTP输出流,并且置空ls_item以便下行数据                  for (i = 0; i < cl; i++)                {                    if (i == (cl - 1))//最后一列,加n                    {                        ls_item += row[i].ToString() + "\n";                    }                    else                    {                        ls_item += row[i].ToString() + "\t";                    }                }                resp.Write(ls_item);                ls_item = "";            }            resp.End();        }




------解决方案--------------------------------------------------------
有人,不会。
------解决方案--------------------------------------------------------
C/C++ code
public  DataSet ds(){            string type2 = FileUpload1.FileName;            var type3 = type2.Substring(type2.LastIndexOf('.'));            if(type3.Equals(".xls") || type3.Equals(".xlsx"))            {                string newName = Server.MapPath("..//App_Data//Uploads//") + DateTime.Now.ToString("hhmmss") + ".xls";                FileUpload1.SaveAs(newName);                string connStr = string.Empty;                if (type3.Equals(".xlsx"))                {                    connStr = "Provider=Microsoft.Ace.OleDb.12.0;Data Source=" + newName +                              ";Extended Properties='Excel 12.0 Xml; HDR=YES; IMEX=1'";                }                else if (type3.Equals(".xls"))                {                    connStr = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + newName +                              ";Extended Properties='Excel 8.0; HDR=YES; IMEX=1'";                }                OleDbConnection conn = new OleDbConnection(connStr);                if (conn.State.ToString() == "Closed")                {                    conn.Open();                }                DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);                var tableName = dt.Rows[0][2].ToString().Trim();                var str1 = string.Format("Select * from [{0}]", tableName);                OleDbDataAdapter oda = new OleDbDataAdapter(str1, conn);                DataSet ds = new DataSet();                oda.Fill(ds);                conn.Close();                File.Delete( newName );return ds;}
  相关解决方案