试图连接到两个数据库,asp.net成员资格连接抛出一个异常

时间:2014-01-14 20:46:25

标签: c# asp.net asp.net-membership

以下是我们遇到的问题: 我们有一个Web应用程序将连接到两个单独的数据库。来自不同国家的用户将访问该网站。根据您的来源,您将连接到两个数据库中的一个。这工作正常,直到两个用户登录,我们尝试使用Membership.GetUser()方法。这将通过一个例外,即在获得用户之前需要打开连接。正在发生的是,当您运行executeNoQuery()方法时,连接字符串已更改且打开的连接不同。

try
{
   conn.Open();
   reader = cmd.ExecuteReader();

   if (reader.HasRows)
   {
      reader.Read();
      u = GetUserFromReader(reader);
   }
   updateCmd.ExecuteNonQuery();
}

我在conn.open上放置了断点,发生的事情是在ExcuteReader()之后,连接字符串被更改为另一个连接字符串,因此连接未打开,因此导致异常。

1 个答案:

答案 0 :(得分:0)

如果尝试使用相同的Connection对象,则必须关闭连接,更改连接字符串并重新打开连接。只需更改连接字符串然后执行命令就会导致此错误。

更新

每次尝试打开时,您都需要设置并检查连接字符串。我还将连接和命令对象包装在using()语句中,以确保在不使用连接时将它们正确处理掉。这应该处理与其他用户的任何冲突,并消除上面的try / catch语句。我还添加了一行代码来检查连接状态。我没有对此进行测试,但它会编译,它应该为您提供完成代码的良好基础。

// TODO: Set your connection string based on whatever criteria you need.
            string connectionString = String.Empty;

            using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings[connectionString].ConnectionString))
            {
                if (connection.State != ConnectionState.Open)
                    connection.Open();

                using (var command = new SqlCommand("commandToExecute", connection))
                {
                    var reader = command.ExecuteReader();
                    // Do whatever.
                }
            }