首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么锁的信息在5-6秒后出现得这么晚?

为什么锁的信息在5-6秒后出现得这么晚?
EN

Stack Overflow用户
提问于 2016-02-16 00:25:29
回答 1查看 120关注 0票数 0

我有一个简单的应用程序,有两个按钮。第一个按钮create transaction,在提交之前保持30秒。

第二个按钮execute方法,我试图更新相同的记录。

我的观点是获取有关锁定记录的信息,但在5-6秒后抛出异常。

在运行过程中,有关锁的信息会立即出现。

如何在C#中实现类似的效率?

代码语言:javascript
复制
    private void button1_Click(object sender, RoutedEventArgs e)
    {
        Task.Run(  () =>
        {
            using (OdbcConnection con = new OdbcConnection("DSN=myDSN;UID=root;PWD=qweasd"))
            {
                OdbcCommand command = new OdbcCommand();
                OdbcTransaction transaction = null;

                command.Connection = con;

                try
                {
                    con.Open();

                    while (con.State != ConnectionState.Open)
                    {
                        Thread.Sleep(10);
                    }

                    transaction = con.BeginTransaction();

                    command.Connection = con;
                    command.Transaction = transaction;

                    command.CommandText = " UPDATE pub.ad_mstr SET ad_line1 = 'button3' where ad_mstr.ad_addr = 'abcdefgh'  ";

                    command.CommandTimeout = 1;
                    command.ExecuteNonQuery();

                    for (int i = 0; i < 30; i++)
                    {
                        Thread.Sleep(1000);
                    }


                    transaction.Commit();

                }
                catch (Exception exc)
                {
                    try
                    {
                        transaction.Rollback();
                    }
                    catch
                    {

                    }
                }

            }
            //_startedTransaction1 = true;
        }); /* Task.Run ( () => */
    }

    private void button2_Click(object sender, RoutedEventArgs e)
    {
        if (!_startedTransaction1)
        {
            Task.Run(() =>
            {
                using (OdbcConnection con = new OdbcConnection("DSN=myDSN;UID=root;PWD=qweasd"))
                {
                    OdbcCommand command = new OdbcCommand();
                    OdbcTransaction transaction = null;

                    command.Connection = con;

                    try
                    {
                        con.Open();
                        while (con.State != ConnectionState.Open)
                        {
                            Thread.Sleep(10);
                        }

                        transaction = con.BeginTransaction();

                        command.Connection = con;
                        command.Transaction = transaction;

                        command.CommandText = " UPDATE pub.ad_mstr SET ad_name = 'button1' where ad_mstr.ad_addr = 'abcdefgh'  ";

                        command.ExecuteNonQuery();

                        transaction.Commit();

                    }
                    catch (Exception exc)
                    {
                        try
                        {
                            transaction.Rollback();
                        }
                        catch
                        {

                        }
                    }

                    //_startedTransaction1 = true;
                }
            });
        }
        else
        {
            //_startedTransaction1 = false;
        }

    }

我想补充的是,我的'myDSN‘是提交的隔离级别。5-6秒后出现的异常情况为:

"System.Collections.ListDictionaryInternal pgoe1023.dll ERROR HY000ODBC Progress Wire Protocol driverFailure在表PUB.ad_mstr的记录上获取记录锁定。“

EN

回答 1

Stack Overflow用户

发布于 2016-02-16 13:53:39

看起来您应该在DB服务器上设置-SQLLockWaitTimeout参数:

http://knowledgebase.progress.com/articles/Article/What-is-the-SQLLockWaitTimeout-Parameter

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35414272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档