c# – SQL插入一行或多行数据?

c# – SQL插入一行或多行数据?,第1张

概述我正在使用控制台应用程序将数据插入到MS SQL Server 2005数据库.我有一个要插入的对象的列表.这里我以Employee类为例: List<Employee> employees; 我可以做的是在时间上插入一个对象: foreach (Employee item in employees){ string sql = @"INSERT INTO Mytable (id, name 我正在使用控制台应用程序将数据插入到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();

我想后一种情况会一次性插入数据行.但是,如果我有
几个ks的数据,SQL查询字符串有什么限制吗?

我不知道如果一个插入多行比一行插入数据更好,在性能方面?

有什么建议要做的更好吗?

解决方法 其实,你写的方式,你的第一个选择将会更快.

>你的第二个例子有问题.你正在做sql = sql等.这将导致为循环的每个迭代创建一个新的字符串对象. (查看StringBuilder类).从技术上讲,您将在第一个实例中创建一个新的字符串对象,但不同之处在于它不必将以前的字符串选项中的所有信息复制.
>您设置的方式,sql Server将不得不潜在地评估一个大量的查询,当你终于发送它,这绝对需要一些时间来确定应该做什么.我应该说,这取决于你需要做的插件的数量.如果n小,你可能会很好,但是随着它的增长,你的问题只会变得更糟.

由于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;
总结

以上是内存溢出为你收集整理的c# – SQL插入一行或多行数据?全部内容,希望文章能够帮你解决c# – SQL插入一行或多行数据?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1260565.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存