以下是我们遇到的问题: 我们有一个Web应用程序将连接到两个单独的数据库。来自不同国家的用户将访问该网站。根据您的来源,您将连接到两个数据库中的一个。这工作正常,直到两个用户登录,我们尝试使用Membership.GetUser()方法。这将通过一个例外,即在获得用户之前需要打开连接。正在发生的是,当您运行executeNoQuery()方法时,连接字符串已更改且打开的连接不同。
try
{
conn.Open();
reader = cmd.ExecuteReader();
if (reader.HasRows)
{
reader.Read();
u = GetUserFromReader(reader);
}
updateCmd.ExecuteNonQuery();
}
我在conn.open上放置了断点,发生的事情是在ExcuteReader()之后,连接字符串被更改为另一个连接字符串,因此连接未打开,因此导致异常。
答案 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.
}
}