Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么有连接打开到我的数据库?_C#_Sql_Sql Server 2005_Database Connection - Fatal编程技术网

C# 为什么有连接打开到我的数据库?

C# 为什么有连接打开到我的数据库?,c#,sql,sql-server-2005,database-connection,C#,Sql,Sql Server 2005,Database Connection,我有一个将用户项目存储为数据库的程序。当然,程序应该允许用户根据需要创建和删除数据库。当程序启动时,它会在特定SQLServer实例中查找具有程序预期结构的所有数据库。然后将这些数据库加载到一个列表框中,以便用户可以选择一个作为项目打开以进行工作 当我试图从程序中删除一个数据库时,我总是收到一个SQL错误,表示数据库当前处于打开状态,操作失败。我已经确定检查要加载的数据库的代码是导致问题的原因。我不知道为什么,因为我很确定所有的连接都被正确地关闭了 以下是所有相关功能。调用BuildProjec

我有一个将用户项目存储为数据库的程序。当然,程序应该允许用户根据需要创建和删除数据库。当程序启动时,它会在特定SQLServer实例中查找具有程序预期结构的所有数据库。然后将这些数据库加载到一个列表框中,以便用户可以选择一个作为项目打开以进行工作

当我试图从程序中删除一个数据库时,我总是收到一个SQL错误,表示数据库当前处于打开状态,操作失败。我已经确定检查要加载的数据库的代码是导致问题的原因。我不知道为什么,因为我很确定所有的连接都被正确地关闭了

以下是所有相关功能。调用BuildProjectList后,从ExecuteSQL运行“DROP DATABASE_name”失败,并显示消息:“无法删除数据库,因为它当前正在使用”。我正在使用SQLServer2005

private SqlConnection databaseConnection;
private string connectionString;
private ArrayList databases;

public ArrayList BuildProjectList()
{
    //databases is an ArrayList of all the databases in an instance
    if (databases.Count <= 0)
    {
      return null;
    }
    ArrayList databaseNames = new ArrayList();
    for (int i = 0; i < databases.Count; i++)
    {
      string db = databases[i].ToString();
      connectionString = "Server=localhost\\SQLExpress;Trusted_Connection=True;Database=" + db + ";";
      //Check if the database has the table required for the project
      string sql = "select * from TableExpectedToExist";
      if (ExecuteSQL(sql)) {
        databaseNames.Add(db);
      }
    }
    return databaseNames;
}

private bool ExecuteSQL(string sql)
{
    bool success = false;
    openConnection();
    SqlCommand cmd = new SqlCommand(sql, databaseConnection);
    try
    {
      cmd.ExecuteNonQuery();
      success = true;
    }
    catch (SqlException ae)
    {
      MessageBox.Show(ae.Message.ToString());
    }
    closeConnection();
    return success;
}

public void openConnection()
{
    databaseConnection = new SqlConnection(connectionString);
    try
    {
      databaseConnection.Open();
    }
    catch(Exception e)
    {
      MessageBox.Show(e.ToString(), "Error", 
      MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

public void closeConnection()
{
    if (databaseConnection != null)
    {
      try
      {
        databaseConnection.Close();
      }
      catch (Exception e)
      {
        MessageBox.Show(e.ToString(), "Error",
        MessageBoxButtons.OK, MessageBoxIcon.Error);
      }
    }
}
私有SqlConnection数据库连接;
私有字符串连接字符串;
私有ArrayList数据库;
公共ArrayList BuildProjectList()
{
//databases是实例中所有数据库的ArrayList

if(databases.Count两条注释。首先,您应该使用using语句,这样您的注释会更干净


关于主题的更多信息,当您尝试删除数据库时,您正在连接到该数据库!请改为连接到主数据库。

两条注释。首先,您应该使用using语句,这样会更干净


有关主题的详细信息,当您尝试删除数据库时,您正在连接到该数据库!请改为连接到主数据库。

SqlConnection
类轮询实际的数据库连接。如果关闭
SqlConnection
,连接将返回到连接池。若要防止此行为,请设置
SqlConnection.Pooling=false;

编辑


John似乎更能说明问题。但您可能还必须记住轮询。

SqlConnection类轮询实际的数据库连接。如果关闭
SqlConnection
,连接将返回到连接池。要防止这种行为,请设置
SqlConnection.Pooling=false;

编辑


John似乎更能说明问题所在。但您可能也必须记住轮询。

我不知道这是问题所在。我在删除主数据库之前尝试连接到主数据库,但它没有修复任何问题。如果不调用BuildProjectList,它会起作用。我不知道这是问题所在。我在删除主数据库之前尝试连接到主数据库,并且它没有修复任何问题。如果不调用BuildProjectList,它就可以工作。我找不到SQLConnection.Pooling属性,但我在删除数据库之前尝试调用SQLConnection.ClearAllPools(),这就成功了。谢谢!我找不到SQLConnection.Pooling属性,但我尝试调用SQLConnection.ClearAllPools()在删除数据库之前,这就成功了。谢谢!