1

IfxCommand を使用して単純な選択クエリを実行しようとしています。分離をダーティ リードに設定したいのですが、IfxTransaction のコンテキストで分離レベルを設定する例しか見つかりませんでした。select ステートメントを発行するだけなので、トランザクションは必要ありません。以下は私の現在のコードですが、これが最善のアプローチですか? また、分離レベルがダーティ リードに設定されたままになる時間を知っている場合は、知りたいです。

DataSet ds = new DataSet();
        IfxConnection connection = new IfxConnection(ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString);
        IfxCommand command = new IfxCommand();

        try
        {
            connection.Open();                
            command.Connection = connection;
            command.CommandText = "SET ISOLATION TO DIRTY READ";
            command.ExecuteNonQuery();

            command.CommandText = BuildCommandString();

            IfxDataAdapter idap = new IfxDataAdapter(command.CommandText, connection);
            idap.Fill(ds);
        }
4

1 に答える 1

0

だろう

using (var noTransaction = new TransactionScope(TransactionScopeOption.Suppress)) {
  // Use your connection here
}

仕事?Informix がアンビエント トランザクションに参加しているかどうか不明ですか? または - ネストされたトランザクションで isolationlevel を明示的に設定する場合:

var txOptions = new TransactionOptions();
txOptions.IsolationLevel = IsolationLevel.ReadUncommitted;
txOptions.Timeout.TotalSeconds * 2));
using (var noTransaction = new TransactionScope(TransactionScopeOption.RequiresNew, txOptions)) {
  // Use your connection here
}

編集: Informix と TransactionScopes に関するコメントを読んでください。そこでのソリューションを反映するには、コードを変更する必要があります。

于 2010-01-28T18:07:19.270 に答える