12 个解决方案
#1
数量大不?
不大就老实的循环更新拼语句吧。
不大就老实的循环更新拼语句吧。
#2
那还不如你直接修改excel然后直接批量导入数据库
#3
insert into TargetTable(field1,field2)
select field1,field2 from ImportTable
select field1,field2 from ImportTable
#4
之前也遇到过这个问题,http://blog.csdn.net/gisfarmer/article/details/3738959找到这个,可以连接EXCEL,读取数据,然后,对数据库部分操作,就自己写吧。因为数据都读出来了,其他问题应该不难了。
#5
我以前做过导入
弱弱的问一句,数据量大的话该怎么处理,还是用循环,不仅效率低,而且导入后数据是乱的~
#7
通过SQL语句查询导入的Excel,然后把查询到的Excel存放在DataTable中,方法如:
/// <summary>
/// 从Excel文件中得到数据
/// </summary>
/// <param name="file"></param>
/// <returns></returns>
public DataTable GetTableFromExcel(HttpPostedFile Excelfile)
{
DataTable DT = new DataTable();
try
{
if (Excelfile.FileName.Substring(Excelfile.FileName.LastIndexOf('.') + 1).Trim().ToLower() != "xls")
{
Page.ClientScript.RegisterStartupScript(this.GetType(),"alert", "<script type='text/javascript'>alert('文件格式不正确(系统识别格式Excel)!');</script>");
return DT;
}
string FilePath = Server.MapPath(".") + DateTime.Now.Ticks.ToString() + ".xls";
Excelfile.SaveAs(FilePath);
string strCon = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FilePath + ";Extended Properties=Excel 8.0";
OleDbConnection myConn = new OleDbConnection(strCon);
myConn.Open(); //打开数据链接,得到一个数据集
DataSet myDataSet = new DataSet(); //得到自己的DataSet对象
string StrSql = "select * from [sheet1$]";
OleDbDataAdapter myCommand = new OleDbDataAdapter(StrSql, myConn); //创建一个 DataSet对象
myCommand.Fill(myDataSet, "sheet1");
myCommand.Dispose();
DT = myDataSet.Tables["sheet1"];
myConn.Close();
myCommand.Dispose();
if (File.Exists(FilePath))
{
File.Delete(FilePath);
}
}
catch (Exception ex)
{
throw ex;
}
return DT;
}
对该方法稍加改动即可实现你的要求!(自己尝试一下!)
/// <summary>
/// 从Excel文件中得到数据
/// </summary>
/// <param name="file"></param>
/// <returns></returns>
public DataTable GetTableFromExcel(HttpPostedFile Excelfile)
{
DataTable DT = new DataTable();
try
{
if (Excelfile.FileName.Substring(Excelfile.FileName.LastIndexOf('.') + 1).Trim().ToLower() != "xls")
{
Page.ClientScript.RegisterStartupScript(this.GetType(),"alert", "<script type='text/javascript'>alert('文件格式不正确(系统识别格式Excel)!');</script>");
return DT;
}
string FilePath = Server.MapPath(".") + DateTime.Now.Ticks.ToString() + ".xls";
Excelfile.SaveAs(FilePath);
string strCon = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FilePath + ";Extended Properties=Excel 8.0";
OleDbConnection myConn = new OleDbConnection(strCon);
myConn.Open(); //打开数据链接,得到一个数据集
DataSet myDataSet = new DataSet(); //得到自己的DataSet对象
string StrSql = "select * from [sheet1$]";
OleDbDataAdapter myCommand = new OleDbDataAdapter(StrSql, myConn); //创建一个 DataSet对象
myCommand.Fill(myDataSet, "sheet1");
myCommand.Dispose();
DT = myDataSet.Tables["sheet1"];
myConn.Close();
myCommand.Dispose();
if (File.Exists(FilePath))
{
File.Delete(FilePath);
}
}
catch (Exception ex)
{
throw ex;
}
return DT;
}
对该方法稍加改动即可实现你的要求!(自己尝试一下!)
#8
如果数据量比较大怎么处理?
#9
在多线程中使用SqlBulkCopy类
将100万条数据分五个线程,每个线程负责20万条数据,每5万条一个事物,五个线程同时启动,看看这样的效果吧。
SQL 2000耗时:7682
SQL 2008耗时:10870
将100万条数据分五个线程,每个线程负责20万条数据,每5万条一个事物,五个线程同时启动,看看这样的效果吧。
SQL 2000耗时:7682
SQL 2008耗时:10870
#10
采取多线程效果也并不一定好
#11
实现大批量Excel数据导入SQL SERVER
http://www.doc88.com/p-481336394475.html
不过感觉楼主要是没有几十上百万条数据,用普通的方法肯定也没有问题
http://www.doc88.com/p-481336394475.html
不过感觉楼主要是没有几十上百万条数据,用普通的方法肯定也没有问题
#12
你可以把EXCEL以手动的方式导入到数据库中,然后在从数据库读取数据到datatable中,进行修改,最后执行一条更新语句
#1
数量大不?
不大就老实的循环更新拼语句吧。
不大就老实的循环更新拼语句吧。
#2
那还不如你直接修改excel然后直接批量导入数据库
#3
insert into TargetTable(field1,field2)
select field1,field2 from ImportTable
select field1,field2 from ImportTable
#4
之前也遇到过这个问题,http://blog.csdn.net/gisfarmer/article/details/3738959找到这个,可以连接EXCEL,读取数据,然后,对数据库部分操作,就自己写吧。因为数据都读出来了,其他问题应该不难了。
#5
我以前做过导入
弱弱的问一句,数据量大的话该怎么处理,还是用循环,不仅效率低,而且导入后数据是乱的~
#6
#7
通过SQL语句查询导入的Excel,然后把查询到的Excel存放在DataTable中,方法如:
/// <summary>
/// 从Excel文件中得到数据
/// </summary>
/// <param name="file"></param>
/// <returns></returns>
public DataTable GetTableFromExcel(HttpPostedFile Excelfile)
{
DataTable DT = new DataTable();
try
{
if (Excelfile.FileName.Substring(Excelfile.FileName.LastIndexOf('.') + 1).Trim().ToLower() != "xls")
{
Page.ClientScript.RegisterStartupScript(this.GetType(),"alert", "<script type='text/javascript'>alert('文件格式不正确(系统识别格式Excel)!');</script>");
return DT;
}
string FilePath = Server.MapPath(".") + DateTime.Now.Ticks.ToString() + ".xls";
Excelfile.SaveAs(FilePath);
string strCon = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FilePath + ";Extended Properties=Excel 8.0";
OleDbConnection myConn = new OleDbConnection(strCon);
myConn.Open(); //打开数据链接,得到一个数据集
DataSet myDataSet = new DataSet(); //得到自己的DataSet对象
string StrSql = "select * from [sheet1$]";
OleDbDataAdapter myCommand = new OleDbDataAdapter(StrSql, myConn); //创建一个 DataSet对象
myCommand.Fill(myDataSet, "sheet1");
myCommand.Dispose();
DT = myDataSet.Tables["sheet1"];
myConn.Close();
myCommand.Dispose();
if (File.Exists(FilePath))
{
File.Delete(FilePath);
}
}
catch (Exception ex)
{
throw ex;
}
return DT;
}
对该方法稍加改动即可实现你的要求!(自己尝试一下!)
/// <summary>
/// 从Excel文件中得到数据
/// </summary>
/// <param name="file"></param>
/// <returns></returns>
public DataTable GetTableFromExcel(HttpPostedFile Excelfile)
{
DataTable DT = new DataTable();
try
{
if (Excelfile.FileName.Substring(Excelfile.FileName.LastIndexOf('.') + 1).Trim().ToLower() != "xls")
{
Page.ClientScript.RegisterStartupScript(this.GetType(),"alert", "<script type='text/javascript'>alert('文件格式不正确(系统识别格式Excel)!');</script>");
return DT;
}
string FilePath = Server.MapPath(".") + DateTime.Now.Ticks.ToString() + ".xls";
Excelfile.SaveAs(FilePath);
string strCon = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FilePath + ";Extended Properties=Excel 8.0";
OleDbConnection myConn = new OleDbConnection(strCon);
myConn.Open(); //打开数据链接,得到一个数据集
DataSet myDataSet = new DataSet(); //得到自己的DataSet对象
string StrSql = "select * from [sheet1$]";
OleDbDataAdapter myCommand = new OleDbDataAdapter(StrSql, myConn); //创建一个 DataSet对象
myCommand.Fill(myDataSet, "sheet1");
myCommand.Dispose();
DT = myDataSet.Tables["sheet1"];
myConn.Close();
myCommand.Dispose();
if (File.Exists(FilePath))
{
File.Delete(FilePath);
}
}
catch (Exception ex)
{
throw ex;
}
return DT;
}
对该方法稍加改动即可实现你的要求!(自己尝试一下!)
#8
如果数据量比较大怎么处理?
#9
在多线程中使用SqlBulkCopy类
将100万条数据分五个线程,每个线程负责20万条数据,每5万条一个事物,五个线程同时启动,看看这样的效果吧。
SQL 2000耗时:7682
SQL 2008耗时:10870
将100万条数据分五个线程,每个线程负责20万条数据,每5万条一个事物,五个线程同时启动,看看这样的效果吧。
SQL 2000耗时:7682
SQL 2008耗时:10870
#10
采取多线程效果也并不一定好
#11
实现大批量Excel数据导入SQL SERVER
http://www.doc88.com/p-481336394475.html
不过感觉楼主要是没有几十上百万条数据,用普通的方法肯定也没有问题
http://www.doc88.com/p-481336394475.html
不过感觉楼主要是没有几十上百万条数据,用普通的方法肯定也没有问题
#12
你可以把EXCEL以手动的方式导入到数据库中,然后在从数据库读取数据到datatable中,进行修改,最后执行一条更新语句