我们有一个应用程序,您可以在其中连接多个数据库。如果您与系统上的一个数据库有连接,则必须在同一数据库上连接。你是怎样做的?我的意思是您可以不止一次打开系统。但是所有开放应用程序都连接到其他数据库。
目前系统是一个实例系统。您可以打开一次。我认为使用活动数据库名称的字符串列表。
有人可以建议我吗?
[STAThread]
static void Main()
{
Guid guid = new Guid("ABCDEF0-12...."
...
using (SingleInstance instance = new SingleInstance(guid))
{
if (instance.IsFirstInstance)
{
instance.ArgumentsReceived += instance_ArgumentsReceived;
instance.ListenForArgumentsFromSuccessiveInstances();
StartApplication();
}
else
{
public class SingleInstance : IDisposable
{
...
public SingleInstance(Guid identifier)
{
this.identifier = identifier;
mutex = new Mutex(true, identifier.ToString(), out ownsMutex);
}
.net连接池为您做很多工作。它的设计,如果您尽可能短,则可以从中受益。您打开连接,执行命令并关闭它。在幕后,连接不会"真正"关闭。它将保持短时间开放。如果再次打开相同的连接(相同的连接串),则可以从池中获得AlRead打开的连接。因此,只有同时需要两个,才能打开与同一数据库的第二个连接(至少在同一过程中)。您可以限制连接字符串中池的大小,因此将限制设置为1应该给您一个和仅一个连接的连接,从而序列化您的访问(另一个线程必须等待)。您可能会遇到问题,因为即使您在一个Transactionscope中两次打开和关闭相同的连接,也会升级为分布式事务。但是,随着使用不同的数据库,这种情况都会在您的情况下发生。您可以通过避免跨越几个打开/关闭的交易(范围)来防止它。或者您自己创建了一个" ConnectionsCope"(我过去曾做过升级问题)。