【问题标题】:C# App hangs during failed SqlConnectionC# 应用程序在失败的 SqlConnection 期间挂起
【发布时间】:2015-11-02 05:09:40
【问题描述】:

我正在构建一个连接到 SQL Server 和数据库的 C# 应用程序。在我的网络上,运行服务器的 PC 在我的路由器上有一个保留的 IP。因此,这是在 SQLConnection 失败时挂起的代码部分。代码如下:

public static Boolean RevisarEstado(String ip, String usuario, String pass)
    {

        Boolean estado = false;
        SqlConnection miconexion = new SqlConnection("Data source=" + ip + ";DataBase=Final_Algoritmos;User ID=" + usuario + ";Password=" + pass);

        try
        {
            miconexion.Open();
            estado = true;
            miconexion.Close();
        }
        catch (Exception) { estado = false;  miconexion.Close(); }
        return estado;

    }

如果SqlConnection的参数是OK的,应用程序不会挂起,但如果不正确,应用程序会挂起。我正在使用 Windows 窗体 C# 进行编程。

我认为我必须在检查连接的过程中使用线程,在连接失败时使用状态栏。所以。帮我!请!

【问题讨论】:

  • 你试过在连接字符串中设置连接超时吗?例如;Connection Timeout=10; 其中 10 以秒为单位。
  • 如果您想在辅助线程上测试连接,请继续执行此操作。如果您在执行此操作时确实遇到问题,那么是时候在这里发布问题了。
  • 感谢您的评论@Loathing,我试过了,但它挂了超过 10 秒
  • 我想在第二个线程中做,使用 OpenAsync 方法,但我不知道如何使用它
  • 与您的问题无关,但您可能想查看SqlConnectionStringBuilder 类,它比使用字符串连接更可靠。例如,如果用户想在密码中包含; 怎么办?连接字符串生成器自动处理分号的转义;

标签: c# winforms user-interface freeze sqlconnection


【解决方案1】:

如果你想检查你的连接,尝试创建一个新的thread 来做:

//Put these two lines to where you want to check the connection
Thread checkConnection = new Thread(() => checkConn());
checkConnection.Start();

//Then create a method like below
public void checkConn()
{
     //Call the check connection method here
     if(!miconexion(ip, user, pass))
     {
         //Handle failure here, please use Invoke if you want to control the UI thread.
     }
     //For best resource usage, join the thread after using it.
     Thead.Join();
}

那么你的程序就不会挂起。

【讨论】:

  • Ty @User2012384 但我有一点错误 Thread.Join();显示关于非静态字段、方法或属性的错误
  • Thread.CurrentThread.Join() 怎么样?我手头没有编译器。试一试
  • 是的,它有效,不,我必须处理调用。挂起的情况已经停止,但句柄故障在应用启动后 54 秒前反应。最后一件事... Thread checkConnection = new Thread(() => checkConn());线程参数是这样的。感谢您的帮助!
  • 哦,多谢指正,如果遇到什么问题,欢迎追问。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-30
  • 1970-01-01
  • 2018-08-02
  • 2011-08-15
  • 2010-11-16
相关资源
最近更新 更多