使用ado.net选择oracle中的更新问题 [英] Select for update issue in oracle using ado.net
问题描述
我有以下代码部分。我正在读取事务中的表数据,然后更新它。在阅读时我需要放一个锁(我不希望任何其他事务访问同一个表甚至读取)。我在查询中使用了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();
}
推荐答案
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屋!