如何通过每个应用程序使用单个数据库打开更多应用程序



我们有一个应用程序,您可以在其中连接多个数据库。如果您与系统上的一个数据库有连接,则必须在同一数据库上连接。你是怎样做的?我的意思是您可以不止一次打开系统。但是所有开放应用程序都连接到其他数据库。

目前系统是一个实例系统。您可以打开一次。我认为使用活动数据库名称的字符串列表。

有人可以建议我吗?

    [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"(我过去曾做过升级问题)。

最新更新