可以打开与不存在的数据库的连接,这怎么可能
本文关键字:数据库 连接 怎么可能 不存在 | 更新日期: 2023-09-27 17:55:52
我有桌面软件。登录时,我测试是否只需打开连接即可访问数据库。如果不能,则会引发异常。如果可以,那么一切都很好,我关闭连接并进入主窗口。直到这里一切都正常。在主窗口中,我有一个线程,通过调用下面的 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);
}
}