6

IDbConnection.ExecuteSql を使用する場合、コマンド タイムアウトを設定するにはどうすればよいですか?

IDbConnection db = ConnectionFactory.OpenDbConnection();
db.ExecuteSql("...");

IDbCommand.ExecuteSql (以下を参照) メソッドを使用すると、コマンド タイムアウトを設定できますが、非推奨のメソッドに関する警告が大量に表示されます。

IDbCommand comm = db.CreateCommand()
comm.CommandTimeout = 240;                    
comm.ExecuteSql("...");
4

2 に答える 2

4

パーティーに少し遅れて、私のコメントで見たように、私はまさにこの問題を抱えていました。私の解決策は、神話の提案を拡張し、新しい拡張メソッドを作成することでした:

public static partial class IDbConnectionExtensionMethods
{
    public static List<T> Query<T>(this IDbConnection self, string sql, int commandTimeout)
    {
        List<T> results = null;
        self.Exec((dbCmd) =>
            {
                dbCmd.CommandTimeout = commandTimeout;
                dbCmd.CommandText = sql;
                using (var reader = dbCmd.ExecuteReader())
                {
                    results = reader.ConvertToList<T>();
                }
            });

        return results;
    }   // eo Query<T>
}   // eo class IDbConnectionExtensionMethods
于 2013-07-30T12:47:47.550 に答える
4

最新の変更により、OrmLite はIDbCommandオブジェクトに関する API を直接提供しなくなりました (最新バージョンではすべて内部化されています)。

ただし、OrmLite は ADO.NET の基礎となるIDbConnectionおよびIDbCommandインターフェイスを介した拡張メソッドにすぎないため、必要に応じて OrmLite の拡張メソッドを簡単にバイパスし、直接使用することができます。次に例を示します。

IDbConnection db = ConnectionFactory.OpenDbConnection();
IDbCommand cmd = db.CreateCommand();
cmd.CommandTimeout = 240;  
cmd.CommandText = "...";
cmd.ExecuteNonQuery();

または、グローバルな CommandTimeout を次のように設定できます。

OrmLiteConfig.CommandTimeout = 240;
于 2013-03-12T05:31:22.660 に答える