Die Transaction-Eigenschaft der Befehl wurde nicht initialisiert

Ich versuche zu laufen ExecuteNonQuery mit der Transaktion, aber ich bekomme immer diese Fehler

OleDbException : ExecuteNonQuery erfordert der Befehl, um eine
Transaktion, wenn die Verbindung dem Befehl zugewiesen ist, in einem
ausstehende lokale Transaktion. Die Transaction-Eigenschaft des command -
wurde nicht initialisiert.

Hier ist mein code: Was ist das problem?

 _dataManager = new DataManager();

        bool bTrance = false;
        _dataManager.BuildConnectionString("server", "MyId", "MyPwd");
        _dataManager.Connect();

        try
        {
            Console.WriteLine("Begin Trans");
            var res = _dataManager.BeginTransaction();              
            if (res)
            {
                bTrance = true;
                Console.WriteLine(" Trans Success");
            }
            Console.WriteLine("Query Executed");
            return _dataManager.ExecuteQuery("call SP_MySp");

        }
        catch (OleDbException objDBExc)
        {
            Console.WriteLine("OleDbException : " + objDBExc.Message);
            if (bTrance)
            {

                _dataManager.RollbackTransaction();

            }

            return false;
        }
        catch (Exception objExc)
        {
            Console.WriteLine("OleDbException : " + objExc.Message);
            if (bTrance)
            {
                bTrance = false;
                _dataManager.RollbackTransaction();

            }

            return false;
        }
        finally
        {
            Console.WriteLine("Done!");
            if (bTrance)
            {
                _dataManager.CommitTransaction();

            }
        }

 public class DataManager
{


    private OleDbConnectionStringBuilder dbConnStr;
    private OleDbConnection dbConn;
    private OleDbTransaction dbTransaction;
    private OleDbCommand dbCommand;
    private bool beginTransaction;


 public bool BeginTransaction()
    {
        try
        {

            if (beginTransaction == false)
            {
                dbTransaction = dbConn.BeginTransaction();
                dbCommand.Transaction = dbTransaction;
                beginTransaction = true;
            }
            else
                dbCommand.Transaction = dbTransaction;
        }
        catch (Exception)
        {
            throw;
        }

        return beginTransaction;
    }

 public bool ExecuteQuery(string command)
    {
        try
        {   
            dbCommand.ExecuteNonQuery();
        }
        catch (OleDbException objDbEx)
        {

            throw;
        }
        catch (Exception objEx)
        {

            throw;
        }

        dbCommand.Parameters.Clear();
        dbCommand.Connection = null;

        return true;
    }

}

Viel einfacher damit das Framework die details kümmern: using (var tx = new TransactionScope()) { your DB code goes here }. Aufruf tx.Commit() am Ende des Blocks, sofern Sie zurücksetzen möchten.
Der Datamanager classcode gehört eigentlich zu einer DLL. Es wird von vielen anderen Anwendungen.

InformationsquelleAutor Amit Kumar | 2016-02-12

Schreibe einen Kommentar