C#批量修改数据库中的数据

时间:2021-10-13 07:46:27
导入excel,保存到datetable中,将datetable中的字段信息批量更新的数据库中,该如何实现,求帮助

12 个解决方案

#1


数量大不?
不大就老实的循环更新拼语句吧。

#2


那还不如你直接修改excel然后直接批量导入数据库

#3


insert into TargetTable(field1,field2)
select field1,field2 from ImportTable

#4


之前也遇到过这个问题,http://blog.csdn.net/gisfarmer/article/details/3738959找到这个,可以连接EXCEL,读取数据,然后,对数据库部分操作,就自己写吧。因为数据都读出来了,其他问题应该不难了。

#5


引用 1 楼 nice_fish 的回复:
数量大不?
不大就老实的循环更新拼语句吧。

我以前做过导入
弱弱的问一句,数据量大的话该怎么处理,还是用循环,不仅效率低,而且导入后数据是乱的~

#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;
        }
对该方法稍加改动即可实现你的要求!(自己尝试一下!)

#8


如果数据量比较大怎么处理?

#9


在多线程中使用SqlBulkCopy类
 将100万条数据分五个线程,每个线程负责20万条数据,每5万条一个事物,五个线程同时启动,看看这样的效果吧。
  SQL 2000耗时:7682
  SQL 2008耗时:10870

#10


采取多线程效果也并不一定好

#11


实现大批量Excel数据导入SQL SERVER
http://www.doc88.com/p-481336394475.html

不过感觉楼主要是没有几十上百万条数据,用普通的方法肯定也没有问题

#12


你可以把EXCEL以手动的方式导入到数据库中,然后在从数据库读取数据到datatable中,进行修改,最后执行一条更新语句

#1


数量大不?
不大就老实的循环更新拼语句吧。

#2


那还不如你直接修改excel然后直接批量导入数据库

#3


insert into TargetTable(field1,field2)
select field1,field2 from ImportTable

#4


之前也遇到过这个问题,http://blog.csdn.net/gisfarmer/article/details/3738959找到这个,可以连接EXCEL,读取数据,然后,对数据库部分操作,就自己写吧。因为数据都读出来了,其他问题应该不难了。

#5


引用 1 楼 nice_fish 的回复:
数量大不?
不大就老实的循环更新拼语句吧。

我以前做过导入
弱弱的问一句,数据量大的话该怎么处理,还是用循环,不仅效率低,而且导入后数据是乱的~

#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;
        }
对该方法稍加改动即可实现你的要求!(自己尝试一下!)

#8


如果数据量比较大怎么处理?

#9


在多线程中使用SqlBulkCopy类
 将100万条数据分五个线程,每个线程负责20万条数据,每5万条一个事物,五个线程同时启动,看看这样的效果吧。
  SQL 2000耗时:7682
  SQL 2008耗时:10870

#10


采取多线程效果也并不一定好

#11


实现大批量Excel数据导入SQL SERVER
http://www.doc88.com/p-481336394475.html

不过感觉楼主要是没有几十上百万条数据,用普通的方法肯定也没有问题

#12


你可以把EXCEL以手动的方式导入到数据库中,然后在从数据库读取数据到datatable中,进行修改,最后执行一条更新语句