C# 批量添加大量数据的问题 mysql

我一次要插入 上万条数据 ,
mysqlconn.Open();
然后循环执行下面语句上万次
cmd = new MySqlCommandsql语句, mysqlconn);
int i = cmd.ExecuteNonQuery();

然后再
mysqlconn.close();

这种方式对吗,会不会效率非常低啊。

我想问问,用这种方式,数据库进行了多少次连接。
有没有什么好办法。。

还有,我组合SQL 全部用String来拼写,会不会不安全啊。好像会被注入,而且写起来相当麻烦,容易错,请问可以用什么方法,我记得JAVA 有一种写法不会被注入,而且写起来很方便,具体我不记得了。,麻烦大家了

主要是第一个问题。

SQL Server的bcp实用工具和BULK INSERT语句是将行快速添加到SQL Server表的传统方法,但ADO.NET 2.0还为用户提供了另外一种方法,即编写新的SqlBulkCopy对象。关系表的DataReader是最普通的行源。此外,用户还能够通过创建有一个或多个要复制的DataTable的运行时间DataSet来从表格化XML文档中插入行。

用SqlBulkCopy将XML文档批量复制到SQL Server表(此过程称为分解)要比SQLXML 3.0的批量加载功能简单得多。批量加载需要一个带注释的XML架构将元素或属性映射到基表列。SqlBulkCopy有一个ColumnMappings集,它允许用户定义源DataTable与目标基表列之间的关系。

以下是通过DataReader将行插入到已有目标基表的步骤。

(1) 为数据源创建一个Connection和一个Command。可以利用任一个.NET数据提供者连接到数据源并创建DataReader。

(2) 用Command.ExecuteReader方法创建一个DataReader。

(3) 创建一个新SqlBulkCopy对象,该对象以连接字符串和对应的SqlBulkCopyOptions枚举成员作为它的两个参数。

(4) 设置SqlBulkCopy.DestinationTableName属性值。

(5) 如果目标表的架构与源表或查询不同,则将ColumnMapping成员添加到ColumnMapping集。

(6) 设置其他可选SqlBulkCopy属性值,如BatchSize和BulkCopyTimeout。

(7) 如果用户的复制操作涉及大量的记录,或者要在速度慢的网络连接中运行,可对SqlBulkCopy.SqlRowsCopied事件添加一个处理查询来显示记录的复制量或百分比。

(8) 调用SqlBulkCopy.WriteToServer方法完成复制操作。

(9) 执行SqlBulkCopy.Close()方法并关闭Connection(如果没有关闭的话),否则重新用SqlBulkCopy对象完成其他操作。

表2-3描述了SqlBulkCopyOptions枚举的成员。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-05-08
你可以进行参数化操作.使注入无效.追问

对了,就是参数化操作,

能举个例子吗?

追答

例子给你.
strSql.Append("insert into PLWord(");
strSql.Append("DjFlag,CName,CID,UserName,UserID,XsGS)");
strSql.Append(" values (");
strSql.Append("@DjFlag,@CName,@CID,@UserName,@UserID,@XsGS)");
SqlParameter[] parameters = {
new SqlParameter("@DjFlag", SqlDbType.Int,4),
new SqlParameter("@CName", SqlDbType.VarChar,50),
new SqlParameter("@CID", SqlDbType.VarChar,50),
new SqlParameter("@UserName", SqlDbType.VarChar,50),
new SqlParameter("@UserID", SqlDbType.VarChar,50),
new SqlParameter("@XsGS", SqlDbType.VarChar,50)};
//
parameters[0].Value = model.DjFlag;
parameters[1].Value = model.CName;
parameters[2].Value = model.CID;
parameters[3].Value = model.UserName;
parameters[4].Value = model.UserID;
parameters[5].Value = model.XsGS;

本回答被提问者采纳