1

如何使用 FbTransactionOptions / TransactionBehavior 来实现等待?

我找到了一些关于使用 FbTransactionOptions / TransactionBehavior 的信息,但没有足够的细节来实现。

string stCmd = "UPDATE " + stTableName + " SET " + liststFieldNamesNoKeyID[0] + " = @p0";
for (int iii = 1; iii < liststFieldNamesNoKeyID.Count(); iii++)
    stCmd += ", " + liststFieldNamesNoKeyID[iii] + " = @p" + iii.ToString();
stCmd += " WHERE" + stFieldKeyID + "= @p" + liststFieldNamesNoKeyID.Count().ToString();

FbTransaction fbTransaction = fbConn.BeginTransaction();
new FbTransactionOptions()
{
    TransactionBehavior = FbTransactionBehavior.Concurrency | 
                          FbTransactionBehavior.Wait
}; 

using (FbCommand fbCmd = new FbCommand(stCmd, fbConn, fbTransaction)) {
    for (int iii = 0; iii < liststFieldNamesNoKeyID.Count(); iii++) {
        string stPlaceHolder = "@p" + (iii).ToString();
        string stValue = liststNewValuesNoKeyID[iii];
        fbCmd.Parameters.AddWithValue(stPlaceHolder, stValue);
    }
    int iKeyID = Convert.ToInt32(stKeyID);
    fbCmd.Parameters.AddWithValue("@p" + liststFieldNamesNoKeyID.Count().ToString(), iKeyID);
    fbCmd.ExecuteNonQuery();
    fbTransaction.Commit();

在上面的示例中,没有使用 TransactionBehavior。重新排列会导致编译器抱怨。

new FbTransactionOptions()
{
    TransactionBehavior = FbTransactionBehavior.Concurrency | 
                          FbTransactionBehavior.Wait
};
FbTransaction fbTransaction = fbConn.BeginTransaction(TransactionBehavior);

另外,如何设置 Wait 的值?

4

1 回答 1

2

你需要使用FbConnection.BeginTransaction(FbTransactionOptions options). 你需要将FbTransactionOptions你创建的实例传递给它,所以:

var transactionOptions = new FbTransactionOptions()
{
    TransactionBehavior = FbTransactionBehavior.Concurrency | 
                          FbTransactionBehavior.Wait
}; 
FbTransaction fbTransaction = fbConn.BeginTransaction(transactionOptions);

您的原始代码不起作用,因为您只创建了一个实例FbTransactionOptions并立即将其丢弃。第二次尝试没有奏效,因为你没有TransactionBehavior任何地方(它是 的属性FbTransactionOptions,而不是单独的东西)。

于 2017-04-15T12:04:09.400 回答