2012-08-02 35 views
0

我已经有一个用户上传Excel文档的页面。该文档包含成员信息,提交后文件内容应替换SQL Server表中包含的成员数据。异常导入到SQL Server的Excel数据

如何添加fileUploader后代码会导致异常。

if (fileUploader.HasFile) 
{ 
    string contentType = fileUploader.PostedFile.ContentType; 
    // Excel 2007 || Excel 2003 
    if (contentType.Equals("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") || contentType.Equals("application/vnd.ms-excel")) 
    { 
     hidePanels(); 
     Members members = new Members(); 
     if (members.getAllNotExportedMembers().Count > 0) 
     { 
      //error message 
     } 
     else 
     { 
      bool backupSucceed = 
         members.backUpDatabase(Server.MapPath("~/backup-db") + @"\db-backup-" + 
               DateTime.Now.ToString().Replace("/", "-").Replace(":", "-") + ".bak"); 
      if (backupSucceed) 
      { 
       bool fileUploaded = Helper.saveFile(fileUploader.FileBytes, 
                  Server.MapPath("~/admin/kar/"), 
                  fileUploader.FileName, 1, User.Identity.Name); 
       if (fileUploaded) 
       { 
        bool truncateSucceed = members.truncateTable(); 
        if (truncateSucceed) 
        { 
         importExcel(Server.MapPath("~/admin/kar/"), "2012.xlsx"); 
        } 
       } 
      } 
     } 
    } 
} 

如果我评论的一切了,除了:

bool truncateSucceed = members.truncateTable(); 
if (truncateSucceed) 
{ 
    importExcel(Server.MapPath("~/admin/kar/"), "2012.xlsx"); 
    showSuccesPanel("Success"); 
} 

它的工作原理,因为它应该和不会引起异常。

例外:

System.Data.OleDb.OleDbException(0X80004005):外部表不是预期的格式。
在System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString 构造,OleDbConnection的连接)
在System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions 选项,对象poolGroupProviderInfo,池类DBConnectionPool, 的DbConnection owningObject)
在System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(的DbConnection owningConnection,DbConnectionPoolGroup poolGroup)
在System.Data.ProviderBase.DbConnectionFactory.GetConnection(的DbConnection owningConnection)
在System.Data.ProviderBa se.DbConnectionClosed.OpenConnection(的DbConnection outerConnection,DbConnectionFactory connectionFactory的)
在System.Data.OleDb.OleDbConnection.Open()
在admin.admin_uploadMemberList.importExcel(字符串文件路径,字符串文件名)在uploadMemberList.aspx.cs:线91

OLEDB的ConnectionString:

string conn = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + fileName 
+ @";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1;ImportMixedTypes=Text;TypeGuessRows=0"""; 

怎么能这样呢?

+0

顺便说一下,您在连接字符串中的“TypeGuessRows”中缺少“T”。 – Bridge 2012-08-02 22:35:27

+0

@Bridge谢谢,只是编辑错误:) – KLIM8D 2012-08-02 22:54:23

回答

0

好吧,我发现是什么导致了这个问题。这是由saveFile方法引起的 - 如果我正在上传一个文件并且已经存在一个具有相同名称的文件 - 则抛出异常。

public static bool saveFile(this Byte[] fileBytes, string filePath, string fileName, int category, string uploadedBy) 
{ 
    try 
    { 
     FileStream fileStream = new FileStream(filePath + "/" + fileName, FileMode.Create, FileAccess.ReadWrite); 
     fileStream.Write(fileBytes, 0, fileBytes.Length); 
     fileStream.Dispose(); 
     fileStream.Close(); 
     FileUpload fileUpload = new FileUpload(); 
     return fileUpload.createFileUpload(fileName, category, filePath, uploadedBy, DateTime.Now); 
    } 
    catch (Exception ex) 
    { 
     mLog.logMessage(ex, HttpContext.Current.Request.Url.ToString(), 1); 
     return false; 
    } 
} 

它只是覆盖文件,因为它应该 - 但也许有人可以解释为什么我得到异常然后。

相关问题