首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

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

2012-09-07 
excel导入sql Server!错误:外部表不是预期的格式。“/”应用程序中的服务器错误。---------------------------

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;} 


[解决办法]
你那个方法不是很看的出问题 上面那个方式是我一直用的...看看吧 或许有帮助
[解决办法]
Public Function ImportDataToTempTable(ByVal ds As DataSet) As TaskResultType
Dim UploadFacilityID As Integer = 0
Dim UserID As Integer = 1
Dim Facility As Integer = 2
Dim Curr As Integer = 3
Dim TotalAmount As Integer = 4
Dim MaturityDate As Integer = 5
Dim IssueDate As Integer = 6
Dim Curr_Alt As Integer = 7
Dim TotalAmount_Alt As Integer = 8
Dim Comp_ID As Integer = 9
Dim Role As Integer = 10
Dim ParticipationAmt As Integer = 11
Dim IntStatus As Integer = 12
Dim ContNo As Integer = 13

Dim strInsertData As String = "Insert Into intUploadFacility(UploadFacilityID,UserID,Facility,Curr,TotalAmount,MaturityDate,IssueDate,Curr_Alt,TotalAmount_Alt,Comp_ID,Role,ParticipationAmt,IntStatus,ContNo) " & _
"values(" & _
"@UploadFacilityID,@UserID,@Facility,@Curr,@TotalAmount,@MaturityDate,@IssueDate,@Curr_Alt," & _
"@TotalAmount_Alt,@Comp_ID,@Role,@ParticipationAmt,@IntStatus,@ContNo)"

Dim intRecordID As Integer = 0

Dim tr As SqlTransaction
tr = Conn.BeginTransaction("IMPORT_DATA")

Try
For i As Integer = 0 To ds.Tables(0).Rows.Count - 1

Dim row As DataRow = ds.Tables(0).Rows(i)

Dim arrParam() As SqlParameter = _
{ _
New SqlParameter("@UploadFacilityID", SqlDbType.Int), _
New SqlParameter("@UserID", SqlDbType.VarChar), _
New SqlParameter("@Facility", SqlDbType.NVarChar), _
New SqlParameter("@Curr", SqlDbType.VarChar), _
New SqlParameter("@TotalAmount", SqlDbType.Decimal), _
New SqlParameter("@MaturityDate", SqlDbType.Date), _
New SqlParameter("@IssueDate", SqlDbType.Date), _
New SqlParameter("@Curr_Alt", SqlDbType.VarChar), _
New SqlParameter("@TotalAmount_Alt", SqlDbType.Decimal), _
New SqlParameter("@Comp_ID", SqlDbType.Int), _
New SqlParameter("@Role", SqlDbType.NVarChar), _
New SqlParameter("@ParticipationAmt", SqlDbType.Decimal), _
New SqlParameter("@IntStatus", SqlDbType.VarChar), _
New SqlParameter("@ContNo", SqlDbType.NVarChar)}
intRecordID = intRecordID + 1
arrParam(UploadFacilityID).Value = intRecordID
' todo: user id 
Dim useId As String = Parameter(USER_ID).ToString()
arrParam(UserID).Value = TruncString(useId.ToString(), 50)
arrParam(Facility).Value = TruncString(row("Facility").ToString(), 200)
arrParam(Curr).Value = TruncString(row("Curr").ToString(), 3)
arrParam(TotalAmount).Value = row("Amount")
arrParam(MaturityDate).Value = row("MaturityDate")
arrParam(IssueDate).Value = row("IssueDate")
arrParam(Curr_Alt).Value = TruncString(row("CurrAlt").ToString(), 3)


arrParam(TotalAmount_Alt).Value = row("AmountAlt")
arrParam(Comp_ID).Value =row("Comp_ID")
arrParam(Role).Value = TruncString(row("Role").ToString(), 100)
arrParam(ParticipationAmt).Value = row("ParticipationAmt")
arrParam(IntStatus).Value = ""
arrParam(ContNo).Value = TruncString(row("ContNo").ToString(), 10)

'
SqlHelper.ExecuteNonQuery(tr, CommandType.Text, strInsertData, arrParam)
Next

Catch ex As Exception
tr.Rollback()
Throw ex

End Try

tr.Commit()
tr.Dispose()

Return TaskResultType.Success
End Function
[解决办法]
是不是跟版本有关系呀
[解决办法]
导出的是2003还是2010啊

热点排行