c# - 可以打开一个不存在的数据库的连接,这怎么可能?

标签 c# sql wpf database visual-studio-2013

我有桌面软件。在登录时,我测试是否可以通过打开连接来访问数据库。如果不能,则抛出异常。如果可以,那么一切都很好,我关闭连接并进入主窗口。直到这里一切正常。在主窗口中,我有一个线程通过调用下面的 isDbConnectionOk 方法检查 1 到 1 分钟的连接:

sqlConnString =  @"Data Source=(LocalDB)\v11.0;AttachDbFilename=" + ConfigurationManager.AppSettings["DatabasePath"] + ";Integrated Security=True";
sqlConn = new SqlConnection(sqlConnString);



private bool isDbConnectionOk(string errorMessage)
{
    using (var l_oConnection = new SqlConnection(sqlConn.ConnectionString))
    {
        try
        {
            l_oConnection.Open();
            return true;
        }
        catch (SqlException)
        {
            if (!String.IsNullOrEmpty(errorMessage))
            {
                this.ShowMessageAsync("Waring", errorMessage);
            }
            return false;
        }
    }
}

我通过插入带有数据库的 U 盘并连接到它来对此进行测试。当我在第一次检查后进入主窗口时,我拔下棒子并等待线程再次检查。尽管没有要连接的数据库,但连接打开没有任何问题。有人可以解释一下吗?它到底是如何缓存它或发生了什么?如果数据库路径无效或无法访问,为什么登录部分会抛出错误,而在主窗口中,当没有数据库存在时,它仍然能够打开连接?

最佳答案

试一试:

D:\Sample.mdf 更改为您的文件路径

 private string _connectionString =
        @"Data Source =(LocalDB)\v11.0;AttachDBFileName=D:\Sample.mdf;" +
        "Integrated Security=true";

    private bool IsDbConnectionOk(out string errorMessage)
    {
        using (var connection = new SqlConnection(_connectionString))
        {
            try
            {
                connection.Open();
                if (connection.State != ConnectionState.Open)
                {
                    errorMessage = null;
                    return false;
                }
                errorMessage = null;
                return true;
            }
            catch (Exception exp)
            {
                errorMessage = exp.Message;
                return false;
            }
            finally
            {
                connection.Close();
            }
        }
    }

    private void BtnTestConnection_OnClick(object sender, RoutedEventArgs e)
    {
        string errormessage;
        var isOk = IsDbConnectionOk(out errormessage);
        if (isOk)
        {
            MessageBox.Show("Connection Is OK");
        }
        else
        {
            MessageBox.Show("Connection error : " + errormessage);
        }
    }

关于c# - 可以打开一个不存在的数据库的连接,这怎么可能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30821910/

相关文章:

c# - 当前上下文中不存在 session ?

c# - 如何在 C# 中获取肽的所有 dna 编码

c# - 将 C++ 方法转换为 C#

c# - 忽略执行 SQL 脚本时的错误

wpf - .ico 中的图像作为 DynamicResource

c# - 如何在 WPF 中调整 Canvas 的大小?

c# - WPF 快速通知控件

C# 将图片框添加到面板

PHP MySQL- 根据 GET 变量更改 Where 语句

sql - 我在oracle中的密码不会输出