c# – SQL插入一行或多行数据?
我正在使用控制台应用程序将数据插入到MS SQL Server 2005数据库.我有一个要插入的对象的列表.这里我以Employee类为例:
List<Employee> employees; 我可以做的是在时间上插入一个对象: foreach (Employee item in employees) { string sql = @"INSERT INTO Mytable (id,name,salary) values ('@id','@name','@salary')"; // replace @par with values cmd.CommandText = sql; // cmd is IDbCommand cmd.ExecuteNonQuery(); } 或者我可以建立一个这样的balk插入查询: string sql = @"INSERT INTO MyTable (id,salary) "; int count = employees.Count; int index = 0; foreach (Employee item in employees) { sql = sql + string.format( "SELECT {0},'{1}',{2} ",item.ID,item.Name,item.Salary); if ( index != (count-1) ) sql = sql + " UNION ALL "; index++ } cmd.CommandType = sql; cmd.ExecuteNonQuery(); 我想后一种情况会一次性插入数据行.但是,如果我有 我不知道如果一个插入多行比一行插入数据更好,在性能方面? 有什么建议要做的更好吗? 解决方法
其实,你写的方式,你的第一个选择将会更快.
>你的第二个例子有问题.你正在做sql = sql等.这将导致为循环的每个迭代创建一个新的字符串对象. (查看StringBuilder类).从技术上讲,您将在第一个实例中创建一个新的字符串对象,但不同之处在于它不必将以前的字符串选项中的所有信息复制. 由于SQL Server处理批量事务的方式,批量插入比单个插入更快.如果要从C#中插入数据,您应该采取第一种方法,并将每500个插入的内容包装在一个事务中并提交,然后执行下一个500等等.这也有一个优点,如果一个批次失败,你可以陷阱那些,弄清楚出了什么问题,重新插入那些.还有其他方法可以做到这一点,但这肯定会比提供的两个例子有所改进. var iCounter = 0; foreach (Employee item in employees) { if (iCounter == 0) { cmd.BeginTransaction; } string sql = @"INSERT INTO Mytable (id,'@salary')"; // replace @par with values cmd.CommandText = sql; // cmd is IDbCommand cmd.ExecuteNonQuery(); iCounter ++; if(iCounter >= 500) { cmd.CommitTransaction; iCounter = 0; } } if(iCounter > 0) cmd.CommitTransaction; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |