展开全部
这是excel导入数据库的方法,也可以改成导入其他excel表中。
不废话,自己看,10W条数据导入时间不会超过1分钟。
string strCon = "";
string name = infor.FileName;//获取文件名
string xPath = infor.PostedFile.FileName; //获取完整客户端文件路径
string kzm = System.IO.Path.GetExtension(name);
string newName = DateTime.Now.ToString("yyyyMMddHHmmss") + kzm;
string filePath = Server.MapPath("~") + newName;
infor.PostedFile.SaveAs(filePath);
if (kzm.ToLower() == ".xlsx")
{
strCon = "Provider=MICROSOFT.ACE.OLEDB.12.0;" + "Data Source=" + filePath + ";" + "Extended Properties='Excel 12.0;HDR=Yes;IMEX=1'";
}
else if (kzm.ToLower() == ".xls")
{
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=False;IMEX=1'";
}
else
{
ClientScript.RegisterStartupScript(GetType(), "msg", "<script>alert('请导入正确的Excel文件。')</script>");
System.IO.File.Delete(filePath);
return;
}
OleDbConnection OleConn = new OleDbConnection(strCon);
string sql = "SELECT * FROM [Sheet1$]";
DataSet ids = new DataSet();
try
{
OleConn.Open();
OleDbDataAdapter da = new OleDbDataAdapter(sql, strCon);
da.Fill(ids, "sheet1");
OleConn.Close();
System.IO.File.Delete(filePath);
}
catch
{
ClientScript.RegisterStartupScript(GetType(), "msg", "<script>alert('无法打开Excel文件,可能被其他程序占用,请关闭后再试。')</script>");
System.IO.File.Delete(filePath); return;
}
try
{
string str_Connection = ConfigurationManager.ConnectionStrings["GWMSRMV2ConnectionString"].ConnectionString;
SqlConnection orc = new SqlConnection(str_Connection);
orc.Open();
System.Diagnostics.Stopwatch timer = new System.Diagnostics.Stopwatch();
SqlBulkCopy sqlBC = new SqlBulkCopy(orc);
sqlBC.BatchSize = 100000;
sqlBC.DestinationTableName = "gyshf";
sqlBC.ColumnMappings.Add("" + ids.Tables["sheet1"].Rows[0][0].ToString() + "", "gysid");
sqlBC.ColumnMappings.Add("" + ids.Tables["sheet1"].Rows[0][1].ToString() + "", "hftxt");
sqlBC.ColumnMappings.Add("" + ids.Tables["sheet1"].Rows[0][2].ToString() + "", "hftype");
sqlBC.ColumnMappings.Add("" + ids.Tables["sheet1"].Rows[0][3].ToString() + "", "hffj");
timer.Start();
sqlBC.WriteToServer(ids.Tables[0]);
timer.Stop();
orc.Dispose();
ClientScript.RegisterStartupScript(GetType(), "msg", "<script>alert('" + timer.ElapsedMilliseconds.ToString() + "'毫秒)</script>");
}
catch
{
ClientScript.RegisterStartupScript(GetType(), "msg", "<script>alert('数据库连接失败!。')</script>");
}
finally
{
}
不废话,自己看,10W条数据导入时间不会超过1分钟。
string strCon = "";
string name = infor.FileName;//获取文件名
string xPath = infor.PostedFile.FileName; //获取完整客户端文件路径
string kzm = System.IO.Path.GetExtension(name);
string newName = DateTime.Now.ToString("yyyyMMddHHmmss") + kzm;
string filePath = Server.MapPath("~") + newName;
infor.PostedFile.SaveAs(filePath);
if (kzm.ToLower() == ".xlsx")
{
strCon = "Provider=MICROSOFT.ACE.OLEDB.12.0;" + "Data Source=" + filePath + ";" + "Extended Properties='Excel 12.0;HDR=Yes;IMEX=1'";
}
else if (kzm.ToLower() == ".xls")
{
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=False;IMEX=1'";
}
else
{
ClientScript.RegisterStartupScript(GetType(), "msg", "<script>alert('请导入正确的Excel文件。')</script>");
System.IO.File.Delete(filePath);
return;
}
OleDbConnection OleConn = new OleDbConnection(strCon);
string sql = "SELECT * FROM [Sheet1$]";
DataSet ids = new DataSet();
try
{
OleConn.Open();
OleDbDataAdapter da = new OleDbDataAdapter(sql, strCon);
da.Fill(ids, "sheet1");
OleConn.Close();
System.IO.File.Delete(filePath);
}
catch
{
ClientScript.RegisterStartupScript(GetType(), "msg", "<script>alert('无法打开Excel文件,可能被其他程序占用,请关闭后再试。')</script>");
System.IO.File.Delete(filePath); return;
}
try
{
string str_Connection = ConfigurationManager.ConnectionStrings["GWMSRMV2ConnectionString"].ConnectionString;
SqlConnection orc = new SqlConnection(str_Connection);
orc.Open();
System.Diagnostics.Stopwatch timer = new System.Diagnostics.Stopwatch();
SqlBulkCopy sqlBC = new SqlBulkCopy(orc);
sqlBC.BatchSize = 100000;
sqlBC.DestinationTableName = "gyshf";
sqlBC.ColumnMappings.Add("" + ids.Tables["sheet1"].Rows[0][0].ToString() + "", "gysid");
sqlBC.ColumnMappings.Add("" + ids.Tables["sheet1"].Rows[0][1].ToString() + "", "hftxt");
sqlBC.ColumnMappings.Add("" + ids.Tables["sheet1"].Rows[0][2].ToString() + "", "hftype");
sqlBC.ColumnMappings.Add("" + ids.Tables["sheet1"].Rows[0][3].ToString() + "", "hffj");
timer.Start();
sqlBC.WriteToServer(ids.Tables[0]);
timer.Stop();
orc.Dispose();
ClientScript.RegisterStartupScript(GetType(), "msg", "<script>alert('" + timer.ElapsedMilliseconds.ToString() + "'毫秒)</script>");
}
catch
{
ClientScript.RegisterStartupScript(GetType(), "msg", "<script>alert('数据库连接失败!。')</script>");
}
finally
{
}
展开全部
把excel充当数据库进行读取,然后在写入 。就这么简单。
需要注意的就是,读取写入时不同的excel版本,访问字符串不同。
需要注意的就是,读取写入时不同的excel版本,访问字符串不同。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主为什么要把excel再次导入到excel
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不明白,不如程序直接复制文件,另存为另外的文件名
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询