Sql server 在ASP.NET中将excel上载到SQL Server

Sql server 在ASP.NET中将excel上载到SQL Server,sql-server,excel,file-upload,Sql Server,Excel,File Upload,当我尝试将Excel数据表上载到SQL Server时,我在第一次上载时遇到以下错误,当我尝试上载时,它显示以下错误 在上传之前,我正在删除目录中的文件 string[] filePaths1 = Directory.GetFiles(Server.MapPath(@"Excel\")); foreach (string filePath1 in filePaths) File.Delete(filePath1); 进程无法访问该文件 'C:\inetpub\vhosts\xyz.c

当我尝试将Excel数据表上载到SQL Server时,我在第一次上载时遇到以下错误,当我尝试上载时,它显示以下错误

在上传之前,我正在删除目录中的文件

string[] filePaths1 = Directory.GetFiles(Server.MapPath(@"Excel\"));

foreach (string filePath1 in filePaths)
    File.Delete(filePath1);
进程无法访问该文件

'C:\inetpub\vhosts\xyz.com\httpdocs\newofficework\Excel\super.xlsx' 因为它正被另一个进程使用


您似乎在这里执行多个操作1删除,然后2上载

你是如何上传这些文件的?如果您使用的是SaveAs方法,请确保您处理了相同的方法

例如,fuExcel是我的文件上载控件


具有文件上载控件和上载按钮的页面,在选择Excel文件时,用户需要单击上载按钮将数据存储到服务器。在这里,我们将上传的文件视为数据库,因此我们需要创建到该文件的OLEDB连接,从该连接将被创建,数据将作为DataTable提取到C[Sheet1$]”是存在所需数据的工作表的名称

string SourceConstr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" +  + "';Extended Properties= 'Excel 8.0;HDR=Yes;IMEX=1'";
OleDbConnection con = new OleDbConnection(SourceConstr);
string query = "Select * from [Sheet1$]";
OleDbDataAdapter data = new OleDbDataAdapter(query, con);
data.Fill(dtExcel);
通过该代码,将为Excel文件创建连接,Sheet1中的数据将转储到DataTable类型的dtExcel中。 注意:“$”必须位于工作表名称之后

fileName = FileUpload1.ResolveClientUrl(FileUpload1.PostedFile.FileName);
int count = 0;
DataClassesDataContext conLinq = new DataClassesDataContext("Data Source=server name;Initial Catalog=Database Name;Integrated Security=true");
try
{
   DataTable dtExcel = new DataTable();
   string SourceConstr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + fileName + "';Extended Properties= 'Excel 8.0;HDR=Yes;IMEX=1'";
   OleDbConnection con = new OleDbConnection(SourceConstr);
   string query = "Select * from [Sheet1$]";
   OleDbDataAdapter data = new OleDbDataAdapter(query, con);
   data.Fill(dtExcel);
   for (int i = 0; i < dtExcel.Rows.Count; i++)
   {
      try
      {
         count += conLinq.ExecuteCommand("insert into table name values(" + dtExcel.Rows[i][0] + "," + dtExcel.Rows[i][1] + ",'" + dtExcel.Rows[i][2] + "',"+dtExcel.Rows[i][3]+")");
      }
      catch (Exception ex)
      {
         continue;
      }
   }
   if (count == dtExcel.Rows.Count)
   {
      <--Success Message-->
   }
   else
   {
      <--Failure Message-->
   }
}
catch (Exception ex)
{
   throw ex;
}
finally
{
   conLinq.Dispose();
}
fileName = FileUpload1.ResolveClientUrl(FileUpload1.PostedFile.FileName);
int count = 0;
DataClassesDataContext conLinq = new DataClassesDataContext("Data Source=server name;Initial Catalog=Database Name;Integrated Security=true");
try
{
   DataTable dtExcel = new DataTable();
   string SourceConstr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + fileName + "';Extended Properties= 'Excel 8.0;HDR=Yes;IMEX=1'";
   OleDbConnection con = new OleDbConnection(SourceConstr);
   string query = "Select * from [Sheet1$]";
   OleDbDataAdapter data = new OleDbDataAdapter(query, con);
   data.Fill(dtExcel);
   for (int i = 0; i < dtExcel.Rows.Count; i++)
   {
      try
      {
         count += conLinq.ExecuteCommand("insert into table name values(" + dtExcel.Rows[i][0] + "," + dtExcel.Rows[i][1] + ",'" + dtExcel.Rows[i][2] + "',"+dtExcel.Rows[i][3]+")");
      }
      catch (Exception ex)
      {
         continue;
      }
   }
   if (count == dtExcel.Rows.Count)
   {
      <--Success Message-->
   }
   else
   {
      <--Failure Message-->
   }
}
catch (Exception ex)
{
   throw ex;
}
finally
{
   conLinq.Dispose();
}
Add these two name space in your class file

using System.Data.OleDb;

using System.Data.SqlClient;

Use following code

public void importDataFromExcel(string excelFilePath)

{ 

//Declare Variables - Edit these based on your particular situation

 string sSQLTable = "tDataMigrationTable";

 // make sure your sheet name is correct, here sheet name is Sheet1, so you can change your sheet name if have different

string myExcelDataQuery = "Select StudentName,RollNo,Course from [Sheet1$]"; 

try

{

//Create our connection strings

string sExcelConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelFilePath + ";Extended Properties=" + "\"Excel 8.0;HDR=YES;\"";



string sSqlConnectionString = "SERVER=MyDatabaseServerName;USER ID=DBUserId;PASSWORD=DBUserPassword;DATABASE=DatabaseName;CONNECTION RESET=FALSE"; 

//Execute a query to erase any previous data from our destination table

string sClearSQL = "DELETE FROM " + sSQLTable;

SqlConnection SqlConn = new SqlConnection(sSqlConnectionString);

SqlCommand SqlCmd = new SqlCommand(sClearSQL, SqlConn);

SqlConn.Open();

SqlCmd.ExecuteNonQuery();

SqlConn.Close(); 

//Series of commands to bulk copy data from the excel file into our SQL table

OleDbConnection OleDbConn = new OleDbConnection(sExcelConnectionString);

OleDbCommand OleDbCmd = new OleDbCommand(myExcelDataQuery, OleDbConn); 

OleDbConn.Open(); 

OleDbDataReader dr = OleDbCmd.ExecuteReader();

SqlBulkCopy bulkCopy = new SqlBulkCopy(sSqlConnectionString); 

bulkCopy.DestinationTableName = sSQLTable; 

while (dr.Read())

{

bulkCopy.WriteToServer(dr);

} 

OleDbConn.Close();

}

catch (Exception ex)

{

//handle exception

} 

}