C# 将Excel数据导入SQL Server时出现异常
我有一个用户上传Excel文档的页面。文档包含成员信息,提交后,文件内容应替换SQL Server表中包含的成员数据 不管怎样,在我添加了文件上传程序之后,代码都会导致异常C# 将Excel数据导入SQL Server时出现异常,c#,sql-server,excel,C#,Sql Server,Excel,我有一个用户上传Excel文档的页面。文档包含成员信息,提交后,文件内容应替换SQL Server表中包含的成员数据 不管怎样,在我添加了文件上传程序之后,代码都会导致异常 if (fileUploader.HasFile) { string contentType = fileUploader.PostedFile.ContentType; // Excel 2007 || Excel 2003 if (contentType.Equals("applicatio
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");
}
它正常工作,不会导致异常
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");
}
}
}
}
}
}
例外情况:
System.Data.OleDb.OLEDBEException 0x80004005:外部表未采用预期格式。
位于System.Data.OleDb.OleDbConnectionInternal..ctorOleDbConnectionString
构造,OLEDB连接
在System.Data.OleDb.OleDbConnectionFactory.CreateConnectionDbConnectionOptions中
选项、对象池组ProviderInfo、数据库连接池池、,
DbConnection owningObject
位于System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnectionDbConnection
owningConnection,DbConnectionPoolGroup poolGroup
位于System.Data.ProviderBase.DbConnectionFactory.GetConnectionDbConnection
所有权连接
在System.Data.ProviderBase.DbConnectionClosed.OpenConnectionDbConnection
外部连接,数据库连接工厂连接工厂
在System.Data.OleDb.OleDbConnection.Open处
在admin.admin_uploadMemberList.importExcelString文件路径中,uploadMemberList.aspx.cs中的字符串文件名:第91行
OleDB连接字符串:
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""";
这怎么可能呢?好吧,我找到了导致问题的原因。这是由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;
}
}
它只是按它应该的方式覆盖了文件-但也许有人可以解释为什么我会出现异常。顺便说一句,您的连接字符串中的TypeGuessRows中缺少T。@Bridge谢谢,只是编辑错误: