Meine Anwendung mit TimesTen DB zum Speichern von Daten. Im Folgenden finden Sie meinen Code zum Aktualisieren von Daten und zum Zurückgeben einer aktualisierten Zeile.ODP.NET: Wie kann ich Daten von dynamischen SQL zu Datensatz
conn = new OracleConnection("My Connection");
conn.Open();
OracleTransaction tran = conn.BeginTransaction(IsolationLevel.ReadCommitted);
OracleCommand command = new OracleCommand();
command = new OracleCommand(@"DECLARE idNo NUMBER;
BEGIN
select id into idNo from " + prefix_db + @"tbl_request_in where upper(status)='PENDING' and ROWNUM <= 1 order by priority, id FOR update;
update " + prefix_db + @"tbl_request_in set status ='Processing',begin_time= SYSDATE(),response_node='10.9.70.47'
where upper(status) <> 'PROCESS' and upper(status) <> 'PROCESSING' and upper(status) <> 'OK' and upper(status)<>'ERROR'
and id=idNo;
OPEN :RETURNCURSOR for select * from APITT_tbl_request_in where id=idNo;
END;", conn);
command.Transaction = tran;
command.BindByName = true;
OracleParameter outNumPrm = command.Parameters.Add("RETURNCURSOR", OracleDbType.RefCursor, DBNull.Value, ParameterDirection.ReturnValue);
// create a data adapter to use with the data set
OracleDataAdapter da = new OracleDataAdapter(command);
// create the data set
DataSet ds = new DataSet();
// fill the data set
da.Fill(ds);
Und ich gebe Fehler
{Oracle.DataAccess.Client.OracleException ORA-01722: ungültige Nummer
bei Oracle.DataAccess.Client.OracleException.HandleErrorHelper (Int32 errCode OracleConnection conn , IntPtr opsErrCtx, OpoSqlValCtx * pOpoSqlValCtx, Objekt src, String Prozedur, Boolean bÜberprüfen) bei Oracle.DataAccess.Client.OracleException.HandleError (Int32 errCode OracleConnection anschl, IntPtr opsErrCtx, Objekt src, Boolean bÜberprüfen) bei Oracle.DataAccess.Client.OracleDataReader.Read() bei System.Data.Common.DataAdapter.FillLoadDataRow (SchemaMapping mapping) bei System.Data.Common.DataAdapter.FillFromReader (Datensatz Datensatz Datentabelle Datentabelle, String srcTable, DataReaderContainer Datareader Int32 startrecord, Int32 maxRecords, Datacolumn parentChapterColumn, Object parentChapterValue) bei System.Data.Common.DataAdapter.Fill (DataSet dataSet, String srcTable, IDataReader Datareader Int32 startrecord, Int32 maxRecords) bei Oracle.DataAccess.Client .OracleDataAdapter.Fill (DataSet dataSet, Zeichenfolge srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords) bei Oracle.DataAccess.Client.OracleDataAdapter.Fill (DataSet-Daten Set, Int32 startrecord, Int32 maxRecords, String srcTable, IDbCommand Befehl, CommandBehavior Verhalten) bei System.Data.Common.DbDataAdapter.Fill (DataSet dataSet)
Wie kann ich es beheben?
Funktioniert die gleiche SQL in den SQL-Tools, die Sie verwenden? –
Ich benutze SQL Developer Tool, und meine Abfrage läuft ok –
Ich denke, der Parameter sollte 'ParameterDirection.Output' Typ Wert haben –