C#中如何启动SQL命令之后,忽略返回值,直接继续运行程序?

shoppo0505 2013-02-07 01:50:10
老革命碰到新问题,希望各位指点.
我自己写的EXE程序,程序会收集数据,收集完之后,在最后一步会调用一个SQL存储过程,处理已经存储的数据,但是这个存储过程会处理好几百万条数据,处理时间会有近10分钟,默认Timeout时间不够,我也不想增加等待时间,因为我也不需要返回值.
怎么样能不等待执行完毕,直接结束程序?

一般像这种都会做SSIS包,但是我不想搞太复杂,还有什么办法解决?
...全文
261 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
wl076 2013-02-09
  • 打赏
  • 举报
回复
Sql 代理是有一个常驻内存的服务来处理事物。 楼主也可以写一个服务来单独处理大事物,然后把Timeout设置成0 就可以解决了。
qldsrx 2013-02-08
  • 打赏
  • 举报
回复
知道为什么代理作业管理程序里执行代理可以直接关闭吗?因为那个界面只是管理界面,并非真正执行代理的进程,有个后台服务用来执行代理,如果你在执行代理过程中,将那个服务给停止了,代理必定执行失败。同理,自己的程序也是,想要随时停止只能找个后台服务常驻。
  • 打赏
  • 举报
回复
那你就建个触发器,触发了去处理数据。 存储过程只需要去触发这个触发器就行了。 触发后存储过程就结束了。不需要等待。
shoppo0505 2013-02-07
  • 打赏
  • 举报
回复
引用 9 楼 gxingmin 的回复:
在sqlserver里做个作业,作业里调那个存储过程 直接调度那个作业,调完直接退出,让作业去执行存储过程
通常都是这么做的,我在顶楼就说了,想避免这种方法,不然还总是要在数据库安装SSIS包
gxingmin 2013-02-07
  • 打赏
  • 举报
回复
在sqlserver里做个作业,作业里调那个存储过程 直接调度那个作业,调完直接退出,让作业去执行存储过程
shoppo0505 2013-02-07
  • 打赏
  • 举报
回复
引用 5 楼 lye2000000_super 的回复:
那你就建个触发器,触发了去处理数据。 存储过程只需要去触发这个触发器就行了。 触发后存储过程就结束了。不需要等待。
就像6楼说的,确实不能结束程序。 目前能想到的就是把sql命令写在bat文件中,然后执行bat文件,但是绕来绕去有点繁琐。 难道没有其他方法了么?
shoppo0505 2013-02-07
  • 打赏
  • 举报
回复
引用 2 楼 stonespace 的回复:
或者用BeginExecuteNonQuery异步执行存储过程,
异步执行的话,还是有进程的,难道就不能在数据库层面直接执行?就是让数据库直接调用存储过程. 不知道如果使用cmd的话,是不是也会有进程.
Hauk 2013-02-07
  • 打赏
  • 举报
回复
调用command的异步方法或者开一个线程去执行
stonespace 2013-02-07
  • 打赏
  • 举报
回复
或者用BeginExecuteNonQuery异步执行存储过程,
stonespace 2013-02-07
  • 打赏
  • 举报
回复
增加timeout时间,然后用一个线程来执行这个sql语句,呵呵,也挺复杂的,
qldsrx 2013-02-07
  • 打赏
  • 举报
回复
引用 5 楼 lye2000000_super 的回复:
那你就建个触发器,触发了去处理数据。 存储过程只需要去触发这个触发器就行了。 触发后存储过程就结束了。不需要等待。
错! 触发器是存储过程执行的一部分,如果触发器执行过程中出错,直接会在存储过程执行中返回错误信息,触发器本身没有事务概念,如果存储过程中使用了Begin Tran开启事务,那么触发器就和存储过程处于同一个事务中,要回滚是一起回滚的。
qldsrx 2013-02-07
  • 打赏
  • 举报
回复
用多线程只能解决不用等待的问题,你可以处理其它事情去,但是如果想关闭程序则不行,那样会中断SQL的执行过程的,不过你可以在关闭程序的事件中,判断SQL执行的那个线程是否还在运行,如果还在运行就将程序界面隐藏了,并等待所有后台线程运行完毕再退出。

110,539

社区成员

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

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

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