Click here to Skip to main content
15,894,337 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hi,
I have the following code part. I am reading a table data inside a transaction, then update it. While reading i need to put a lock (i dont want any other transaction access the same table even for read). I have used "for update" method inside the query, but it is not working: Nothing is coming, what is the problem with this code:
C#
try
    {
        myOracleConnection = gcnew OracleConnection("Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=1.1.1.1)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=SCDB)));User Id=user;Password=pw;");
        myOracleConnection->Open();
        myTransaction = myOracleConnection->BeginTransaction();
        myDataAdapter = gcnew OracleDataAdapter();
        selectionString = "select * from db.tablename FOR UPDATE";
        OracleCommand ^selectCommand = gcnew OracleCommand(selectionString);
        myDataAdapter->SelectCommand = selectCommand;
        myDataAdapter->SelectCommand->Transaction = myTransaction;
        myDataAdapter->SelectCommand->Connection = myOracleConnection;
        myDataAdapter->SelectCommand->ExecuteNonQuery();

        myDataSet = gcnew DataSet("sample");
        myDataAdapter->FillSchema(myDataSet,SchemaType::Source, "pele_misc");
        myDataAdapter->Fill (myDataSet,"pele_misc");
        dt = myDataSet->Tables["pele_misc"];
        myDataSet->WriteXml("G:/data10.xml");

        updateString = "update db.tablename set value = 'http://www.yahoo.co.in' where name like 'XEN_SUPPORT_URL'";
        OracleCommand ^updateCommand = gcnew OracleCommand(updateString);
        updateCommand->Connection = myOracleConnection;
        myDataAdapter->UpdateCommand = updateCommand;
        myDataAdapter->UpdateCommand->Transaction = myTransaction;
        myDataAdapter->UpdateCommand->ExecuteNonQuery();
        System::Threading::Thread::Sleep(20000);
        myTransaction->Commit();

    }
    catch(Exception ^ e)
    {
        myTransaction->Rollback();
        Console::Write(e->ToString () );
    }
    __finally
    {

        myOracleConnection->Close();
    }
Posted

1 solution

MSDN:
ExecuteNonQuery returns no rows
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery%28v=vs.110%29.aspx[^]

I think you should use ExecuteReader...
 
Share this answer
 
Comments
Member 11168418 3-Dec-14 6:07am    
Tried everything, ExecuteNonQuery, ExecuteReader, ExecuteOracleNonQuery etc. Got nothing in all cases. Any chance to have problem with connection, i am accessing db from a remote machine.
Kornfeld Eliyahu Peter 3-Dec-14 6:08am    
I believe you should got an error in case of such problems...
Member 11168418 3-Dec-14 6:15am    
Problem shows if i use the query like: select * from db.tablename FOR UPDATE
but query "select * from db.tablename" is working fine, but the update query wont be worked in this case too.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900