Sql server 在ASP.NET中将excel上载到SQL Server
当我尝试将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
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
}
}