c#向数据库添加大量数据为何我的这么慢

问题描述

c#向数据库添加大量数据为何我的这么慢

public void ShuaXin()
{

        SqlCommand com = new SqlCommand("delete from priceavg", DBHelper.con);
        DBHelper.con.Open();
        com.ExecuteNonQuery();
        DBHelper.con.Close();
        pros = new List<ProPrice>();
        com.CommandText = "select proid from proprice where newprice=1";
        DBHelper.con.Open();
        SqlDataReader re = com.ExecuteReader();
        ProPrice pp = null;
        while (re.Read())
        {
            pp = new ProPrice() { ProID = Convert.ToInt32(re["ProID"]) };
            pros.Add(pp);
        }
        re.Close();
        DBHelper.con.Close();
        //刷新上个月价格
        for (int i = 0; i < pros.Count; i++)
        {
            com.CommandText = string.Format("select ptype from product where id={0} ", pros[i].ProID);
            com.Connection = DBHelper.con;
            DBHelper.con.Open();
            if (com.ExecuteScalar() == null)
            {
                DBHelper.con.Close();
                continue;
            }
            int id = (int)com.ExecuteScalar();
            DBHelper.con.Close();
            DateTime beginTime = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(-1);  //获取本月的月份然后减去一个月
            DateTime finishTime = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddDays(-1);

            if (set.Tables["Avg1"] != null)
            {
                set.Tables.Remove("Avg1");
            }
            string sql = string.Format("select " + getSqlWhere(id) + " from proprice  where proid={0} and addtime between '{1}' and '{2}'", pros[i].ProID, beginTime, finishTime);
            adapter = new SqlDataAdapter(sql, DBHelper.con);
            adapter.Fill(set, "Avg1");
            DataTable dt = set.Tables["Avg1"];
            string[] strs = new string[dt.Columns.Count + 1];
            int count1 = 0;
            if (dt.Columns.Count == 1)
            {
                strs = new string[dt.Columns.Count + 1];
            }
            double avg = 0;
            for (int j = 0; j < dt.Columns.Count; j++)
            {

                double num = 0;
                int count = 0;
                for (int c = 0; c < dt.Rows.Count; c++)
                {
                    if (dt.Rows[c][j] is DBNull || dt.Rows[c][j] == null)
                    {
                        count++;
                        continue;
                    }

                    if ((dt.Rows[c][j]).ToString() == "非数字")
                    {
                        count++;
                        continue;
                    }

                    if (Convert.ToDouble(dt.Rows[c][j]) == 0)
                    {
                        count++;
                        continue;
                    }
                    num += Convert.ToDouble(dt.Rows[c][j]);

                }

                strs[j] = Math.Round(num / (dt.Rows.Count - count), 2).ToString();

                if (strs[j] == "非数字")
                {
                    count1++;
                }
                else
                {
                    avg += Convert.ToDouble(strs[j]);
                }

            }
            strs[strs.Length - 1] = Math.Round((avg / (strs.Length - 1 - count1)), 2).ToString();

            com.CommandText = string.Format("select count(*) from product where id={0} ", pros[i].ProID);
            DBHelper.con.Open();
            if ((int)com.ExecuteScalar() == 0)
            {
                DBHelper.con.Close();
                continue;
            }
            DBHelper.con.Close();

            com.CommandText = string.Format("select IsSeason,ProDescription,ID,ProductImage,Spec,ProAddress,MaoZhong,JingZhong from product where id={0}", Convert.ToInt32(pros[i].ProID));
            DBHelper.con.Open();
            re = com.ExecuteReader();
            Model.Product p1 = null;
            if (re.Read())
            {
                p1 = new Model.Product()
                {
                    IsSeason = Convert.ToInt32(re["IsSeason"]),
                    ProDescription = re["ProDescription"].ToString(),
                    ID = Convert.ToInt32(re["ID"]),
                    ProductImage = re["ProductImage"].ToString(),
                    Spec = re["Spec"].ToString(),
                    ProAddress = re["ProAddress"].ToString(),
                    MaoZhong = re["MaoZhong"].ToString(),
                    JingZhong = re["JingZhong"].ToString()
                };
            }
            re.Close();
            DBHelper.con.Close();
            string sqlstr = @"INSERT INTO priceAvg ([IsSeason],[ProDescription],[编号],[图片],[品名],[规格],[产地],[毛重],[净重],[isnoBiaoZhunJin],[isnoBiaoZhunJinls]," + insertSql(id) + ",timetype) values('" + p1.IsSeason + "','" + p1.ProDescription + "','" + p1.ID + "','" + p1.ProductImage + "','" + PinMing(Convert.ToInt32(pros[i].ProID)) + "','" + p1.Spec + "','" + p1.ProAddress + "','" + p1.MaoZhong + "','";
            sqlstr = sqlstr + p1.JingZhong + "','" + 0 + "','" + 0 + "','";
            if (insertSql(id).Trim() == "pavgprice")
            {
                strs = new string[] { strs[0] };
            }
            int nb = 0;
            for (int m = 0; m < strs.Length; m++)
            {
                if (strs[m] == "非数字")
                {
                    strs[m] = "0";
                }
                if (strs[m] == null)
                {
                    strs[m] = "0";
                }
                if (strs[m] == "0")
                {
                    nb++;
                }
                sqlstr = sqlstr + strs[m] + "','";
            }
            if (nb == strs.Length)
            {
                continue;
            }
            sqlstr = sqlstr + 1 + "')";
            com.CommandText = sqlstr;
            DBHelper.con.Open();
            com.ExecuteNonQuery();
            DBHelper.con.Close();
        }
    }

解决方案

用vs的性能分析,看看各行语句的运行时间

解决方案二:

C#中添加数据到数据库
c# 快速 将大量数据插入数据库
大量数据在数据库中的处理

时间: 2024-08-03 20:46:25

c#向数据库添加大量数据为何我的这么慢的相关文章

php使用mysqli向数据库添加数据的方法

 这篇文章主要介绍了php使用mysqli向数据库添加数据的方法,实例分析了php使用mysqli进行数据库操作的技巧,非常具有实用价值,需要的朋友可以参考下     本文实例讲述了php使用mysqli向数据库添加数据的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 $mydb = new mysqli('localhost', 'username', 'password', 'databasename'); $sql = "INSERT INTO us

求大神-如何获取后台数据库里面的数据,返回JSON字符串,并把JSON字符串解析添加到ListView中

问题描述 如何获取后台数据库里面的数据,返回JSON字符串,并把JSON字符串解析添加到ListView中 如何获取后台数据库里面的数据,返回JSON字符串,并把JSON字符串解析添加到ListView中 解决方案 写一个http接口,组织好json数据,客户端接收,可以用gson直接转成对应的对象,listview需要一个List数据源,你把后台传来的数据放到list中,然后adapter的getview中处理显示 解决方案二: Newtonsoft.Json.dll有你想要的 解决方案三:

sqlserver-求一个asp.net 的运用jquery ajax先数据库 添加数据的实例

问题描述 求一个asp.net 的运用jquery ajax先数据库 添加数据的实例 我在做一个asp.net技术做的问卷调查页面,需要把每一项的文本都添加到sqlserver数据库,大概20个选项,每个选项平均有100个字左右 我想问一下 这么大的数据量用jquery ajax 真的可以吗? 如果可以,请各位大神做个用jquery ajax做一个向数据库添加的实例给我,要注释齐全,代码规范的,谢谢! 解决方案 ajax和普通表单提交一样,你数据量大要使用post提交,没有什么ajax不可以的.

新人求解java连接mysql,向数据库添加数据,出错

问题描述 新人求解java连接mysql,向数据库添加数据,出错 package test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.Scanner; public class test{ public static void main(String[] args)throws

Jsp,Servlet向数据库添加数据出现中文乱码问题

问题描述 Jsp,Servlet向数据库添加数据出现中文乱码问题 Myeclipse向数据库添加数据时出现乱码,可是直接在数据库中添加数据并不会乱码,要怎么解决啊? 数据库是Access 解决方案 检查下编码是否一致...

请问往数据库添加一条数据,但是有一条字段总是添加不上去,是什么情况

问题描述 请问往数据库添加一条数据,但是有一条字段总是添加不上去,是什么情况 public String addTransOnOffTime() throws Exception { if (transOnOffTime == null) { response.getWriter().write(jsonMapper.toJson(FAIL)); } else { // transOnOffTime.getTransBasicConfig().setTransIdCard(transIdCard

页面上动态添加一行数据,如何下次在进入页面时,展示出我上次添加的数据(注意:不用数据库)

问题描述 页面上动态添加一行数据,如何下次在进入页面时,展示出我上次添加的数据(注意:不用数据库) 我在页面上动态添加一行数据,保存之后,如何下次在进入页面时,展示出我上次添加的数据(注意:不用数据库) 解决方案 直接在页面上的value=""这里写你的测试值 解决方案二: 用一个ajax添加试试

javascript动态添加表格数据行(ASP后台数据库保存例子)_javascript技巧

在很多web应用中,我们会遇到很多需要动态插入多行纪录的地方.比如,在人才网站上,我们填写简历的时候,我们要填写我们的项目经验,我们可以根据自己的实际情况动态的添加条数,这种不是以单独页面的形式添加,这种动态添加是在同一个页面下动态添加,最后再一起提交到服务器保存到数据库中. 本文,我将以一个类似的例子来做一个前台用Javascript动态添加数据项,后台保存到数据库的例子. 浏览器:IE.6.0 后台:ASP (VBScript ) 前台:HTML + JavaScript HTML代码: 复

visual studio 2010-vs2010的添加新数据源和连接到数据库的区别

问题描述 vs2010的添加新数据源和连接到数据库的区别 在vs2010中,在解决方案管理器右键可以添加一个基于服务的数据库文件,这个和直接 在程序中使用链接字符串 string connectionstring = "Initial Catalog = MyDatabase; Data Source =.; Integrated Security=true"; 然后 SqlConnection conn = new SqlConnection(connectionstring) 然后