ibatis 1.6.2 for .Net 查询超时

发布于 2024-12-11 11:34:03 字数 85 浏览 0 评论 0原文

.net平台上的ibatis 1.6有没有办法设置查询超时?

不幸的是,在这种情况下,升级对我来说不是一个选择。

干杯 谢恩

Is there a way to set the query timeout for ibatis 1.6 on the .net platform?

Unfortunately, upgrading is not an option for me in this case.

Cheers
Shane

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

煮茶煮酒煮时光 2024-12-18 11:34:03

我已经使用装饰器模式来完成此操作,该模式装饰 IDbProvider 以公开所需的方法:

public abstract class LongQueriesDecorator : IDbProvider
{
    protected IDbProvider _iDbProvider;

    public void setDbProvider(IDbProvider iDbProvider)
    {
        this._iDbProvider = iDbProvider;
    }


    public abstract void setCommandTimeout(IDbCommand cmd);

    // implement all IDbProvider methods calling _iDbProvider.METHOD
    // ...
    // except for

    public IDbCommand CreateCommand()
    {
        if (_iDbProvider != null)
        {
            IDbCommand cmd = _iDbProvider.CreateCommand();
            // here you can call the delegate
            setCommandTimeout(cmd);
            return cmd;
        }
        else
        {
            return null;
        }
    }
    // ...
}

然后实现抽象类:

public class LongQueries : LongQueriesDecorator
{
    public override void setCommandTimeout(IDbCommand cmd)
    {
        cmd.CommandTimeout = 1000;  // here you can configure a value in the App.config
    }
}

最后当您构建映射器时:

        _mapper = builder.Configure(sqlMapConfig);
        LongQueries lq = new LongQueries();
        lq.setDbProvider(_mapper.DataSource.DbProvider);
        _mapper.DataSource.DbProvider = lq;

I've done this using the decorator pattern that decorates the IDbProvider to expose the needed method:

public abstract class LongQueriesDecorator : IDbProvider
{
    protected IDbProvider _iDbProvider;

    public void setDbProvider(IDbProvider iDbProvider)
    {
        this._iDbProvider = iDbProvider;
    }


    public abstract void setCommandTimeout(IDbCommand cmd);

    // implement all IDbProvider methods calling _iDbProvider.METHOD
    // ...
    // except for

    public IDbCommand CreateCommand()
    {
        if (_iDbProvider != null)
        {
            IDbCommand cmd = _iDbProvider.CreateCommand();
            // here you can call the delegate
            setCommandTimeout(cmd);
            return cmd;
        }
        else
        {
            return null;
        }
    }
    // ...
}

Then realize the abstract class:

public class LongQueries : LongQueriesDecorator
{
    public override void setCommandTimeout(IDbCommand cmd)
    {
        cmd.CommandTimeout = 1000;  // here you can configure a value in the App.config
    }
}

And finally when you build the mapper:

        _mapper = builder.Configure(sqlMapConfig);
        LongQueries lq = new LongQueries();
        lq.setDbProvider(_mapper.DataSource.DbProvider);
        _mapper.DataSource.DbProvider = lq;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文