有个题不会,求教SQL SERVER数据并发,使用事务+存储过程

风吹腚腚凉 2015-03-31 11:01:08
加精

使用事务+存储过程啥意思啊,怎么就解决了并发呢?看不懂啊。
怎么还跟存储过程扯上关系了?完全看不明白,题目就是数据并发如何解决。
答案就是事务+存储过程。
然后我就彻底迷茫了。

满分求教,有没有明白人给讲讲啊。
...全文
2454 44 打赏 收藏 转发到动态 举报
写回复
用AI写文章
44 条回复
切换为时间正序
请发表友善的回复…
发表回复
风吹腚腚凉 2015-06-03
  • 打赏
  • 举报
回复
引用 43 楼 a295281315 的回复:
[quote=引用 42 楼 wjfwd2010 的回复:] [quote=引用 38 楼 a295281315 的回复:] 只有提交事务硬盘IO才动作,所以使用事务处理数据并发时能提高性能,如果不使用事务硬盘IO就要动作一次,当多并发的时候,就会造成性能瓶颈。 为了这个事,我们公司请了专家来解决这个事情,现在我们公司所有的软件都已经采用事务的方式批量上传数据,的确效果明显,以前上传几千数据要几分钟(因为有很多软件一起上传),现在只要30多秒。
别逗了几千数据要几分钟,你那是数据库连接一开一关导致的,跟事务没关系谢谢。 我都不用看你代码都知道你程序怎么写的。[/quote] 哈哈,你真聪明![/quote] 不是聪明是因为我也2B过。
Mr Dang 2015-05-22
  • 打赏
  • 举报
回复
引用 42 楼 wjfwd2010 的回复:
[quote=引用 38 楼 a295281315 的回复:] 只有提交事务硬盘IO才动作,所以使用事务处理数据并发时能提高性能,如果不使用事务硬盘IO就要动作一次,当多并发的时候,就会造成性能瓶颈。 为了这个事,我们公司请了专家来解决这个事情,现在我们公司所有的软件都已经采用事务的方式批量上传数据,的确效果明显,以前上传几千数据要几分钟(因为有很多软件一起上传),现在只要30多秒。
别逗了几千数据要几分钟,你那是数据库连接一开一关导致的,跟事务没关系谢谢。 我都不用看你代码都知道你程序怎么写的。[/quote] 哈哈,你真聪明!
风吹腚腚凉 2015-05-21
  • 打赏
  • 举报
回复
引用 38 楼 a295281315 的回复:
只有提交事务硬盘IO才动作,所以使用事务处理数据并发时能提高性能,如果不使用事务硬盘IO就要动作一次,当多并发的时候,就会造成性能瓶颈。 为了这个事,我们公司请了专家来解决这个事情,现在我们公司所有的软件都已经采用事务的方式批量上传数据,的确效果明显,以前上传几千数据要几分钟(因为有很多软件一起上传),现在只要30多秒。
别逗了几千数据要几分钟,你那是数据库连接一开一关导致的,跟事务没关系谢谢。 我都不用看你代码都知道你程序怎么写的。
xusir98 2015-04-20
  • 打赏
  • 举报
回复
学习了
then0917 2015-04-20
  • 打赏
  • 举报
回复
大神讲的好多啊 棒
Mr Dang 2015-04-19
  • 打赏
  • 举报
回复
只有提交事务硬盘IO才动作,所以使用事务处理数据并发时能提高性能,如果不使用事务硬盘IO就要动作一次,当多并发的时候,就会造成性能瓶颈。 为了这个事,我们公司请了专家来解决这个事情,现在我们公司所有的软件都已经采用事务的方式批量上传数据,的确效果明显,以前上传几千数据要几分钟(因为有很多软件一起上传),现在只要30多秒。
xusir98 2015-04-19
  • 打赏
  • 举报
回复
学习了
skysenlin 2015-04-13
  • 打赏
  • 举报
回复
看的自己 好无知啊
潇潇雨云 2015-04-13
  • 打赏
  • 举报
回复
卧_槽 2015-04-13
  • 打赏
  • 举报
回复
小曹越来越不负责了,这种帖子有啥好推荐的。。。
samifranco 2015-04-12
  • 打赏
  • 举报
回复
打撒火炬大厦可以呢妈的胶带机的按时
leeya66 2015-04-10
  • 打赏
  • 举报
回复
这二者是没有关联的,答案是错的。 并发跟事务或者并发跟存储过程是扯不上因果关系的
qq_27174297 2015-04-08
  • 打赏
  • 举报
回复
下载个软件还要积分草了, 软件可以用不
不得闲 2015-04-08
  • 打赏
  • 举报
回复
好吧,实际上我也是来看答案的,这个答案给的也太挫了,事务加存储过程。。。啥书上的东西啊
wlcshh 2015-04-08
  • 打赏
  • 举报
回复
数据库自己开发,多好,灵活、高效,不过跨平台时不方便
风吹腚腚凉 2015-04-07
  • 打赏
  • 举报
回复
引用 6 楼 kkk_hongyuen 的回复:
使用事务同时提交多个数据表示例 private void Frm_Main_Load(object sender, EventArgs e) { //创建数据库连接对象 SqlConnection sqlConn = new SqlConnection("Data Source=WIN-GI7E47AND9R\\LS;Database=db_TomeTwo;uid=sa;pwd =;"); List<String> strSqls = new List<string>();//创建集合对象 String strDelete1 = "delete From tb_Author Where AuthorId = '99'";//定义删除第一个表的SQL语句 strSqls.Add(strDelete1);//将SQL语句添加到集合中 String strDelete2 = "delete From tb_AuthorsBook Where AuthorId = '99'";//定义删除第二个表的SQL语句 strSqls.Add(strDelete2);//将SQL语句添加到集合中 string strInsert1 = "insert into tb_Author values('99','zhd')";//定义添加第一个表的SQL语句 strSqls.Add(strInsert1);//将SQL语句添加到集合中 string strInsert2 = "insert into tb_AuthorsBook values('66','C#范例大全','99')";//定义添加第二个表的SQL语句 strSqls.Add(strInsert2);//将SQL语句添加到集合中 if (ExecDataBySqls(strSqls, sqlConn))//如果执行成功 { MessageBox.Show("提交tb_Author数据表成功!", "信息提示"); MessageBox.Show("提交tb_AuthorsBook数据表成功!","信息提示"); } else { MessageBox.Show("提交tb_Author数据表失败!", "信息提示"); MessageBox.Show("提交tb_AuthorsBook数据表失败!", "信息提示"); } SqlDataAdapter sqlda1 = new SqlDataAdapter("select * from tb_Author", sqlConn);//创建数据桥接器对象 SqlDataAdapter sqlda2 = new SqlDataAdapter("select * from tb_AuthorsBook", sqlConn);//创建数据桥接器对象 DataSet myds = new DataSet();//创建数据集对象 sqlda1.Fill(myds, "tb_Author");//填充数据集 sqlda2.Fill(myds, "tb_AuthorsBook");//填充数据集 dataGridView1.DataSource = myds.Tables["tb_Author"];//对第一个DataGridView进行数据绑定 dataGridView2.DataSource = myds.Tables["tb_AuthorsBook"];//对第二个DataGridView进行数据绑定 }//codego.net/ /// <param name="strSqls">使用List泛型封装多条SQL语句</param> /// <param name="sqlConn">数据库连接</param> public bool ExecDataBySqls(List<string> strSqls, SqlConnection sqlConn) { bool booIsSucceed = false;//声明提交数据是否成功的标记 SqlCommand sqlCmd = new SqlCommand();//创建SqlCommand对象 sqlCmd.Connection = sqlConn;//设置SqlCommand对象的Connection属性 if (sqlConn.State == ConnectionState.Closed) { sqlConn.Open();//打开数据库连接 } SqlTransaction sqlTran = sqlConn.BeginTransaction();//开始一个事务 try { sqlCmd.Transaction = sqlTran;//设置SqlCommand对象的Transaction属性 foreach (string item in strSqls) { sqlCmd.CommandType = CommandType.Text;//设置命令类型为SQL文本命令 sqlCmd.CommandText = item;//设置要对数据源执行的SQL语句 sqlCmd.ExecuteNonQuery();//执行SQL语句并返回受影响的行数 } sqlTran.Commit();//提交事务,持久化数据 booIsSucceed = true;//表示提交数据库成功 } catch { sqlTran.Rollback();//回滚事务,恢复数据 booIsSucceed = false;//表示提交数据库失败! } finally { sqlConn.Close();//关闭连接 strSqls.Clear();//清除列表strSqls中的元素 } return booIsSucceed;//方法返回值 } 二、在存储过程中使用事务示例 --判断proc_TransInProc存储过程是否存在,如果存在将它删除 if exists(select name from sysobjects where name='proc_TransInProc'and type='p') drop proc proc_TransInProc --删除存储过程 GO create procedure proc_TransInProc as declare @truc int select @truc=@@trancount if @truc=0 begin tran p1 else save tran pl if (@truc=2) begin rollback tran pl return 25 end if(@truc=0) commit tran pl return 0
你这种封装的东西根本就不靠谱,逻辑简单还行。
风吹腚腚凉 2015-04-05
  • 打赏
  • 举报
回复
引用 15 楼 zanfeng 的回复:
这个主要是对大型的程序 来说吧。小型的程序根本就不存在并发,也就更没有数据并发这么一回事。 设想:一个操作(比如销售某件东西) 你要更新几十个表 (比如日报表,周报,旬报,月报,季报,年报等), //:为什么要更新这么多,当记录很多的时候,你使用Sum之类的去合计,是不现实的。 这个时候使用存储过程是唯一的选择。 如果你使用.net sqlCmd.Transaction 这个来一条一条更新。那将是要命的。 也许你会向上面的所说。 可能有的人以为用了存储过程就能让一个持续3秒钟的查询变成了30毫秒的查询 可能不会有这么100倍这么大的差距。但有时候一倍的差距也足可以让你需要50台服务完成的事,不用去买100台服务器。
怎么个要命法啊,你要讲解一下底层的工作原理和存储过程对比一下哪里要命了? 什么叫大型程序,小型程序就不存在并发了,这个有点说不过去了吧?您是做后端的么? 你别说 可能不会有这么100倍这么大的差距 这个还真有可能! 请您能详细的讲解一下么?我也是第一次听说存储过程是首选的问题。 很好奇呢。
baidu_27107085 2015-04-03
  • 打赏
  • 举报
回复
hahaha不知道怎么回事
风吹腚腚凉 2015-04-01
  • 打赏
  • 举报
回复
引用 5 楼 sp1234 的回复:
[quote=引用 楼主 wjfwd2010 的回复:] 完全看不明白,题目就是数据并发如何解决。
我想,要么可能是对方出的题目有特定的描述,例如并发中的ACID如何解决,而你只看到了一个大概、没有看到特定细节描述。 但是这也联系不上存储过程啊?!一般来说,跟普通的数据库编程操作相关的,都扯不上存储过程的问题。使用存储过程是“体验”的区别,而不是必须用或者必须不用的区别。可能有的人以为用了存储过程就能让一个持续3秒钟的查询变成了30毫秒的查询,也许这样理解存储过程的人就会处处不忘把它抬出来说一下。而实际上,你可以测试一下,如果一个sql经常使用,SQL Server会自动缓存sql编译结果,因此用与不用存储过程基本上察觉不出什么区别。反而倒是在工程上“哪一种方式更加提高开发效率”是重点要顾及的。 所以跟应聘者花时间在这里而没有更深入一点的交流,对于求贤者来说,实在是他自己的损失。[/quote] 非常感谢非常感谢。
风吹腚腚凉 2015-04-01
  • 打赏
  • 举报
回复
引用 9 楼 diaodiaop 的回复:
sql不是自带锁 还需要自己写代码?
有的时候你要考虑并发读取,所以会加脏读,这个时候你就要考虑插入update等逻辑的加锁机制了。
加载更多回复(12)

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧