使用ado.net选择oracle中的更新问题 [英] Select for update issue in oracle using ado.net

查看:68
本文介绍了使用ado.net选择oracle中的更新问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我有以下代码部分。我正在读取事务中的表数据,然后更新它。在阅读时我需要放一个锁(我不希望任何其他事务访问同一个表甚至读取)。我在查询中使用了for update方法,但是它没有工作:什么都没有,这个代码有什么问题:

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:

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();
    }

推荐答案

MSDN:

ExecuteNonQuery不返回任何行

ExecuteNonQuery returns no rows

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



我认为你应该使用ExecuteReader ......

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

I think you should use ExecuteReader...


这篇关于使用ado.net选择oracle中的更新问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆