Oracle + C#Cursor麻烦

时间:2015-08-05 12:43:27

标签: c# oracle powerbuilder

我在PowerBuilder中有以下代码(以Oracle作为数据库)

DECLARE lcur_pat_q CURSOR FOR
SELECT HL7_MSG
  FROM HL7_EXPORT_MSG_Q
 WHERE SOCKET_NUM = :al_socket_num
   AND (:as_export_level  = 'C' OR ACCOUNT_NUM = :gv_acctnum)
   AND SUBSTR(HL7_MSG_TYPE, 1, 3) = 'ADT'
ORDER BY HL7_EXPORT_MSG_Q_NUM
FOR UPDATE OF HL7_EXPORT_MSG_Q_NUM;

OPEN lcur_pat_q;

如何在C#中重写此游标?

此变体

var dbCmd_lcur_pat_q = new OracleCommand();
dbCmd_lcur_pat_q.CommandText = "SELECT HL7_MSG, HL7_EXPORT_MSG_Q_NUM " +
                               "  FROM HL7_EXPORT_MSG_Q " +
                               " WHERE SOCKET_NUM = :al_socket_num " +
                               "   AND (:as_export_level = 'C' OR ACCOUNT_NUM = :gv_acctnum) " +
                               "   AND SUBSTR(HL7_MSG_TYPE, 1, 3) = 'ADT' " +
                               "ORDER BY HL7_EXPORT_MSG_Q_NUM";

dbCmd_lcur_pat_q.Parameters.Add("al_socket_num", OracleDbType.Int32);
dbCmd_lcur_pat_q.Parameters["al_socket_num"].Value = al_socket_num ?? (object)DBNull.Value;
dbCmd_lcur_pat_q.Parameters.Add("as_export_level", OracleDbType.NVarchar2);
dbCmd_lcur_pat_q.Parameters["as_export_level"].Value = as_export_level ?? (object)DBNull.Value;
dbCmd_lcur_pat_q.Parameters.Add("gv_acctnum", OracleDbType.Int32);
dbCmd_lcur_pat_q.Parameters["gv_acctnum"].Value = AppGlobalVariables.gv_acctnum ?? (object)DBNull.Value;
dbCmd_lcur_pat_q.CommandType = CommandType.Text;

var lcur_pat_q = AppGlobalVariables.sqlca.ExecuteReader(dbCmd_lcur_pat_q);

返回空变量lcur_pat_q

ExecuteReader的代码:

public OracleDataReader ExecuteReader(OracleCommand command)
{
    try
    {
        if (_connection == null)
            _connection = InitializeConnection();

        if (_transaction == null)
            _transaction = _connection.BeginTransaction();

        command.Connection = _connection;
        command.Transaction = _transaction;

        sqlcode = 0;
        sqlerrtext = String.Empty;
        command.CommandTimeout = 30;
        command.BindByName = true;
        var reader = command.ExecuteReader();

        if (reader == null) return null;

        if (!reader.HasRows)
            sqlcode = 100;

        return reader;
    }
    catch (OracleException e)
    {
        sqlcode = e.ErrorCode;
        sqlerrtext = e.Message;
        Debug.Print("{0}: {1}", sqlcode, sqlerrtext);
        return null;
    }
    catch (Exception e)
    {
        sqlcode = -999;
        sqlerrtext = e.Message;
        Debug.Print("{0}: {1}", sqlcode, sqlerrtext);
        return null;
    }
}

我不知道如何做到这一点并需要帮助。

0 个答案:

没有答案