C# 批量添加大量数据的问题 mysql
我一次要插入上万条数据,mysqlconn.Open();然后循环执行下面语句上万次cmd=newMySqlCommandsql语句,mysqlconn);inti=cm...
我一次要插入 上万条数据 ,
mysqlconn.Open();
然后循环执行下面语句上万次
cmd = new MySqlCommandsql语句, mysqlconn);
int i = cmd.ExecuteNonQuery();
然后再
mysqlconn.close();
这种方式对吗,会不会效率非常低啊。
我想问问,用这种方式,数据库进行了多少次连接。
有没有什么好办法。。
还有,我组合SQL 全部用String来拼写,会不会不安全啊。好像会被注入,而且写起来相当麻烦,容易错,请问可以用什么方法,我记得JAVA 有一种写法不会被注入,而且写起来很方便,具体我不记得了。,麻烦大家了
主要是第一个问题。 展开
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枚举的成员。
用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枚举的成员。
展开全部
你可以进行参数化操作.使注入无效.
追问
对了,就是参数化操作,
能举个例子吗?
追答
例子给你.
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;
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询