![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
C# 数据库批量更新问题
获取用户输入后,将输入存入datatableA,有三列:a1,a2,a3.现在我要利用表A,来更新数据库里面一个表B中的一列b1。更新过程:1、根据a2,a3查询出一个数...
获取用户输入后,将输入存入datatable A,有三列:a1,a2,a3.
现在我要利用表A,来更新数据库里面一个表B 中的一列b1。
更新过程:
1、根据a2,a3查询出一个数 temp;
2、根据a1,更新表B的中列b1,使之等于temp;
如果单条记录的更新,很好做,直接写一个存储过程即可。
现在如果数据量比较大,不想用循环单条数据的更新。
我该怎么样去批量更新数据库?
我要批量更新数据。回答请附简单代码。。谢谢 。
一楼那样,只能单条更新。存储过程我会。
我想问的是,怎样将datatable里面的数据,批量更新到数据库中,不用循环操作。
4楼操作的意思是不是这样:先将要修改的记录从数据库选出库,进行修改,然后通过SqlCommandBuilder批量更新回去?
五楼那个对我这个情况不行,只是针对web时,托用dataAdpter那个有用 展开
现在我要利用表A,来更新数据库里面一个表B 中的一列b1。
更新过程:
1、根据a2,a3查询出一个数 temp;
2、根据a1,更新表B的中列b1,使之等于temp;
如果单条记录的更新,很好做,直接写一个存储过程即可。
现在如果数据量比较大,不想用循环单条数据的更新。
我该怎么样去批量更新数据库?
我要批量更新数据。回答请附简单代码。。谢谢 。
一楼那样,只能单条更新。存储过程我会。
我想问的是,怎样将datatable里面的数据,批量更新到数据库中,不用循环操作。
4楼操作的意思是不是这样:先将要修改的记录从数据库选出库,进行修改,然后通过SqlCommandBuilder批量更新回去?
五楼那个对我这个情况不行,只是针对web时,托用dataAdpter那个有用 展开
4个回答
展开全部
有一个办法,可能是你想要的。但是不保证一定能实现你的目的。
在C#中有一个SqlCommandBuilder类,该类用来批量自动更新表数据变化,
说是自动更新,其实是根据已知的select语句,来自动生成其他的update,delete语句。
我以前项目的sqlhelper中,用这个类自定义过批量更新方法,在winform中使用一切ok。方法发你,看有用没。
有些细节一定要注意的是,表状态决定表数据的操作,比如表某行状态是修改,那么SqlCommandBuilder会执行update。但是这个状态你要控制好。另外,你传递的select语句,一定要和你所构造的表结构接近吻合。看方法。
/// <summary>
/// operare database by commandbuilder
/// </summary>
/// <param name="connectinString">connectinString</param>
/// <param name="commandString">commandString</param>
/// <param name="sourceDable">do update or insert database table</param>
public static int ExecuteByCommandBuilder(string connectinString, string commandString, DataTable sourceDable, SqlParameter sqlparam)
{
SqlConnection sqlcon = new SqlConnection();
sqlcon.ConnectionString = connectinString;
using (SqlCommand sqlcommand = new SqlCommand(commandString, sqlcon))
{
if (sqlparam != null)
{ sqlcommand.Parameters.Add(sqlparam); }
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = sqlcommand;
//DataSet ds = new DataSet();
//da.Fill(ds);
//ds.Tables[0].Merge(sourceDable, false);
SqlCommandBuilder sqlcommandbuilder = new SqlCommandBuilder(da);
return da.Update(sourceDable);
}
}
在C#中有一个SqlCommandBuilder类,该类用来批量自动更新表数据变化,
说是自动更新,其实是根据已知的select语句,来自动生成其他的update,delete语句。
我以前项目的sqlhelper中,用这个类自定义过批量更新方法,在winform中使用一切ok。方法发你,看有用没。
有些细节一定要注意的是,表状态决定表数据的操作,比如表某行状态是修改,那么SqlCommandBuilder会执行update。但是这个状态你要控制好。另外,你传递的select语句,一定要和你所构造的表结构接近吻合。看方法。
/// <summary>
/// operare database by commandbuilder
/// </summary>
/// <param name="connectinString">connectinString</param>
/// <param name="commandString">commandString</param>
/// <param name="sourceDable">do update or insert database table</param>
public static int ExecuteByCommandBuilder(string connectinString, string commandString, DataTable sourceDable, SqlParameter sqlparam)
{
SqlConnection sqlcon = new SqlConnection();
sqlcon.ConnectionString = connectinString;
using (SqlCommand sqlcommand = new SqlCommand(commandString, sqlcon))
{
if (sqlparam != null)
{ sqlcommand.Parameters.Add(sqlparam); }
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = sqlcommand;
//DataSet ds = new DataSet();
//da.Fill(ds);
//ds.Tables[0].Merge(sourceDable, false);
SqlCommandBuilder sqlcommandbuilder = new SqlCommandBuilder(da);
return da.Update(sourceDable);
}
}
推荐于2017-09-02
展开全部
C# 数据库批量更新问题
有一个办法,可能是你想要的。但是不保证一定能实现你的目的。
在C#中有一个SqlCommandBuilder类,该类用来批量自动更新表数据变化,
说是自动更新,其实是根据已知的select语句,来自动生成其他的update,delete语句。
我以前项目的sqlhelper中,用这个类自定义过批量更新方法,在winform中使用一切ok。方法发你,看有用没。
有些细节一定要注意的是,表状态决定表数据的操作,比如表某行状态是修改,那么SqlCommandBuilder会执行update。但是这个状态你要控制好。另外,你传递的select语句,一定要和你所构造的表结构接近吻合
有一个办法,可能是你想要的。但是不保证一定能实现你的目的。
在C#中有一个SqlCommandBuilder类,该类用来批量自动更新表数据变化,
说是自动更新,其实是根据已知的select语句,来自动生成其他的update,delete语句。
我以前项目的sqlhelper中,用这个类自定义过批量更新方法,在winform中使用一切ok。方法发你,看有用没。
有些细节一定要注意的是,表状态决定表数据的操作,比如表某行状态是修改,那么SqlCommandBuilder会执行update。但是这个状态你要控制好。另外,你传递的select语句,一定要和你所构造的表结构接近吻合
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不用存储过程,是不是下面这样的
SqlConnection conn = new SqlConnection(strConnection));//连接数据库
SqlDataAdapter myAdapter = new SqlDataAdapter();//new一个adapter对象
SqlCommand myCommand = new SqlCommand("select * from "+strTblName),(SqlConnection) conn); //cmd
SqlCommandBuilder myCommandBuilder = new SqlCommandBuilder(myAdapter); //new 一个 SqlCommandBuilder
myAdapter.InsertCommand = myCommandBuilder .GetInsertCommand();//插入
myAdapter.UpdateCommand = myCommandBuilder .GetUpdateCommand();//更新
myAdapter.DeleteCommand = myCommandBuilder .GetDeleteCommand();//删除
conn.Open();//打开数据库
myAdapter.Update(ds); //更新ds到数据库
conn.Close();//关闭数据库
你对web的话,那试试用js 把操作后的表,写成Json然后传到后台处理成DataTable
SqlConnection conn = new SqlConnection(strConnection));//连接数据库
SqlDataAdapter myAdapter = new SqlDataAdapter();//new一个adapter对象
SqlCommand myCommand = new SqlCommand("select * from "+strTblName),(SqlConnection) conn); //cmd
SqlCommandBuilder myCommandBuilder = new SqlCommandBuilder(myAdapter); //new 一个 SqlCommandBuilder
myAdapter.InsertCommand = myCommandBuilder .GetInsertCommand();//插入
myAdapter.UpdateCommand = myCommandBuilder .GetUpdateCommand();//更新
myAdapter.DeleteCommand = myCommandBuilder .GetDeleteCommand();//删除
conn.Open();//打开数据库
myAdapter.Update(ds); //更新ds到数据库
conn.Close();//关闭数据库
你对web的话,那试试用js 把操作后的表,写成Json然后传到后台处理成DataTable
参考资料: http://blog.csdn.net/chengking/archive/2005/08/26/465874.aspx
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
批量肯定是迭代过程,不过有改进的余地。
你可以用生产者-消费者模型,有N个生产者线程查询表A求出temp,放在产品链上,有M个消费者用产品链更新表B
如果是插入操作因为锁的关系消费者效率不高,不过如果是更新的话所有生产者和消费者线程都可以并行运行,效率可想而知
以前有写个一个生产者N个消费者的,代码比较多就不写出来了
你可以用生产者-消费者模型,有N个生产者线程查询表A求出temp,放在产品链上,有M个消费者用产品链更新表B
如果是插入操作因为锁的关系消费者效率不高,不过如果是更新的话所有生产者和消费者线程都可以并行运行,效率可想而知
以前有写个一个生产者N个消费者的,代码比较多就不写出来了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询