日期:2014-05-16  浏览次数:20616 次

关于前台SQL语句
本帖最后由 u013705053 于 2014-03-23 14:26:52 编辑
一、要循环向数据库中插入数据.
问1:在前台的C#中写循环好,还是在储存过程中写循环好?
问2:用前台的循环是一条一条的插入,还是循环完后一起插入;用储存过程是一条一条插入还是循环后一起插入的,或者二者都不是?

------解决方案--------------------
不管站在哪个角度,都是批量的方式比较快
如果是用C#的话,有一种Bulk的方式插入,就是整理好数据后,一次性插入,而不是循环一次,插入一条
参考

        /// <summary>
        /// Bulk方式插入
        /// </summary>
        /// <param name="dt"></param>
        public void ExecuteSqlBulkCopy(DataTable dt)
        {
            using (SqlConnection conn = new SqlConnection(GetConnectionString))
            {
                SqlBulkCopy bulk = new SqlBulkCopy(conn);
                bulk.DestinationTableName = "TestTable";
                bulk.BatchSize = dt.Rows.Count;

                if (dt != null && dt.Rows.Count != 0)
                {
                    conn.Open();
                    bulk.WriteToServer(dt);
                }
                bulk.Close();
            }
        }


------解决方案--------------------
问1:在前台的C#中写循环好,还是在储存过程中写循环好?
--> 在储存过程中写循环好

问2:用前台的循环是一条一条的插入,还是循环完后一起插入;用储存过程是一条一条插入还是循环后一起插入的,或者二者都不是?
--> 用存储过程,循环插入到临时表,然后再一次批量插入目标表,有利于减少锁阻塞的发生.