×

Loading...
Ad by
  • 推荐 OXIO 加拿大高速网络,最低月费仅$40. 使用推荐码 RCR37MB 可获得一个月的免费服务
Ad by
  • 推荐 OXIO 加拿大高速网络,最低月费仅$40. 使用推荐码 RCR37MB 可获得一个月的免费服务

用过SQL Server Management Studio (Express版本也一样)的大侠,当服务器地址,或数据库用户信息输入错误时,链接数据库的过程是可以被Cancel的(不需要等待链接失败返回),请问这个如何实现?

自己用过Task以及可以Cancel的Token这些多线程任务之类的东东实现了一个,但是个人感觉SQL Server Management Studio 的Cancel 用起来更完美流畅,请教:哪位大拿提示一下,要兼容各种场合。

在实际使用中,我是建立一个通用的多线程模块,因为各种“长时间任务”都可以在另一个线程运行,而主界面无非基本都可以放这2个按钮:开始(或链接),Cancel,然后就是正常结束后的处理过程,问题是:Cancel另一个线程的处理是各种各样的,有各种事件需要处理,这个数据库链接的Cancel,我不知道究竟要如何Cancel,有timeout,但是timeout 不是Cancel,我写了几个方法,但是最有效的居然只能是Kill 那个线程,惭愧,究竟如何可以在尝试链接数据库过程中,任何时间可以Cancel 其尝试?而无需等待链接失败返回?
Report

Replies, comments and Discussions:

  • 工作学习 / 学科技术 / 用过SQL Server Management Studio (Express版本也一样)的大侠,当服务器地址,或数据库用户信息输入错误时,链接数据库的过程是可以被Cancel的(不需要等待链接失败返回),请问这个如何实现?
    自己用过Task以及可以Cancel的Token这些多线程任务之类的东东实现了一个,但是个人感觉SQL Server Management Studio 的Cancel 用起来更完美流畅,请教:哪位大拿提示一下,要兼容各种场合。

    在实际使用中,我是建立一个通用的多线程模块,因为各种“长时间任务”都可以在另一个线程运行,而主界面无非基本都可以放这2个按钮:开始(或链接),Cancel,然后就是正常结束后的处理过程,问题是:Cancel另一个线程的处理是各种各样的,有各种事件需要处理,这个数据库链接的Cancel,我不知道究竟要如何Cancel,有timeout,但是timeout 不是Cancel,我写了几个方法,但是最有效的居然只能是Kill 那个线程,惭愧,究竟如何可以在尝试链接数据库过程中,任何时间可以Cancel 其尝试?而无需等待链接失败返回?
    • SqlConnection.Close
      • 虽然在另一个栏目看到我们对于微软苹果看法不同,但是谢谢你编程的指教。这个close我有2个问号(对不起眼下无法验证):一是connection没有建立前发close是否引发异常?二是假如运行了close,服务器端是否仍然会有失败事件返回?
        • 没做过。瞎说一下:你说的流畅是否是responsiveness? 如果是查一查sync and await 的用法;在用SqlConnection.Close之前,查一查state.
          • 源代码不在身边,当初好像已做过这些state和close,但是奇怪的是仍有先前链接请求的返回事件,不过这里表述也无法完全,我要做的是一个通用模块,数据库连接只是其中一个case,要不我回头看看具体项目后再发问,谢谢。
          • 当时写那个项目时记得还没有Async 和 Await, 最新的概念也就是Task +1
        • 看了另一个代码,好像直接close 不管connection状态不会引发异常?但是否继续返回事件(即对上一个connection的尝试反馈)不知道,之前一直为多余的返回事件头痛。
      • 才找到时间测试,还是不能实现我的需求。可以close,但 open 请求在最后仍然返回 数据库连接失败消息过来。看来只能单独写个数据库链接尝试模块了,若cancel,就将返回的消息忽略。
    • 你这个问题提得蛮奇怪,为啥要cancel一个数据库的链接?
      数据库的连接应该是链接池管理的。你要用的时候拿来用一下就好了。

      比如你写一个应用,开始把连接拿过来用一下做一个select啥啥啥的,然后把链接还回去。把你取出的内容用来做网页。等到用户的输入都完了,检查输入是否合法,不合法就直接扔回去重输。合法就再拿一个连接,做事务,然后存,存完后再把链接放回去。
      • 老兄您要不要再仔细看看我问的什么?