小弟目前有一程序,其中要用到如下功能:将取得的dataset数据全盘插入到另外一个数据库(sqlserver)中,我目前是这样写的
......
for(int i,i循环)
{
cmd.cmdtext="insert into xxx values("
cmd.cmdtext+=ds.table[0].rows[i][0].tostring();
cmd.cmdtext+=ds.table[0].rows[i][1].tostring();
cmd.cmdtext+=ds.table[0].rows[i][2].tostring();
cmd.cmdtext+=ds.table[0].rows[i][3].tostring();
cmd.cmdtext+=ds.table[0].rows[i][4].tostring();
cmd.cmdtext+=ds.table[0].rows[i][5].tostring();
.......
cmd.executenonquery();
}现在我发现这样写不够优化,每次操作后sqlserver随着记录插入占用越来越多的内存,我每次数据量又大,少说也几万,然后sqlserver释放内存又非常缓慢,大家有没有比较好的代码或者建议贴一些给我参考参考,谢谢了.
......
for(int i,i循环)
{
cmd.cmdtext="insert into xxx values("
cmd.cmdtext+=ds.table[0].rows[i][0].tostring();
cmd.cmdtext+=ds.table[0].rows[i][1].tostring();
cmd.cmdtext+=ds.table[0].rows[i][2].tostring();
cmd.cmdtext+=ds.table[0].rows[i][3].tostring();
cmd.cmdtext+=ds.table[0].rows[i][4].tostring();
cmd.cmdtext+=ds.table[0].rows[i][5].tostring();
.......
cmd.executenonquery();
}现在我发现这样写不够优化,每次操作后sqlserver随着记录插入占用越来越多的内存,我每次数据量又大,少说也几万,然后sqlserver释放内存又非常缓慢,大家有没有比较好的代码或者建议贴一些给我参考参考,谢谢了.
解决方案 »
- c/s 访问b/s上传的文件,提示文件不存在
- 截取字符串的值
- 为什么backgroundworker里面开启timer无效?
- c#中excel数据导入到access2007的代码???
- 控件是动态生成的,Anchor的属性不行呢
- winfrom中窗体的滚动条问题
- 急求 好点的c# socket 封装类!!! 谢谢!~
- 如果在winform中,datagrid的属性readonly设置成true后,如何实现运行之后点新增按钮datagrid能新增一行呢方法如何写呢?
- 关于DataGrid主从表的问题
- 郁闷,散分,快来啊,先来有分,后来不给
- 一个查询条件中含有多个值,怎么传到存储过程中再查询含有这几个值的记录?
- 求加密的算法
System.Text.StringBuilder sb=new System.Text.StringBuilder()
for(int i,i循环)
{
sb.Append(insert into xxx values( ");
sb.Append(ds.table[0].rows[i][0].tostring());
sb.Append(ds.table[0].rows[i][1].tostring());
sb.Append(ds.table[0].rows[i][2].tostring());
cmd.CommandText=sb.ToString();
.......
cmd.executenonquery();
}
还有,用stringBuider来组合字符串
DataSet dataSet=new DataSet();
SqlDataAdapter da=new SqlDataAdapter("select colName from tableName where 1=0",con);
da.Fill(dataSet)
SqlCommandBuilder cmd=new SqlCommandBuilder(da)
da.Update(你的ds)
注意,两个DataSet的结构要完全一致
不过 不知道 yhy0611 方法一 这样写不知道怎么样
System.Text.StringBuilder sb=new System.Text.StringBuilder()
for(int i,i循环)
{
sb.Append("insert into xxx values( ");
sb.Append(ds.table[0].rows[i][0].tostring());
sb.Append(ds.table[0].rows[i][1].tostring());
sb.Append(ds.table[0].rows[i][2].tostring());
........
sb.Append(") go");
}
cmd.CommandText=sb.ToString(); //一次执行多个insert 命令 本人认为这样写可能更好点
.......
cmd.executenonquery();
System.Text.StringBuilder sb=new System.Text.StringBuilder();
ArrayList columValuList = null;
for(int i,i循环)
{
sb.Append( "insert into xxx values( ");
sb.Append(?,);
sb.Remove(strSql.ToString().LastIndexOf(','), 1);
sb.Append(")");
columValuList = new ArrayList();
columValuList.Add(ds.table[0].rows[i][0].tostring());
String.Format(strSql.ToString(), columValuList.ToArray());
......
}
cmd.executenonquery();
DECLARE @doc NText
SET @doc ='
<ROOT>
<Customer CustomerID="VINET" ContactName="Paul Henriot">
<Order CustomerID="VINET" EmployeeID="5" OrderDate="1996-07-04T00:00:00">
<OrderDetail OrderID="10248" ProductID="11" Quantity="12"/>
<OrderDetail OrderID="10248" ProductID="42" Quantity="10"/>
</Order>
</Customer>
<Customer CustomerID="LILAS" ContactName="Carlos Gonzlez">
<Order CustomerID="LILAS" EmployeeID="3" OrderDate="1996-08-16T00:00:00">
<OrderDetail OrderID="10283" ProductID="72" Quantity="3"/>
</Order>
</Customer>
</ROOT>'
--Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
-- Execute a SELECT statement that uses the OPENXML rowset provider.
INSERT Table
SELECT *
FROM OPENXML (@idoc, '/ROOT/Customer',1)
WITH (CustomerID varchar(10),
ContactName varchar(20))
EXEC sp_xml_removedocument @idoc参考一下。