开发Oracle。插入并返回ID

时间:2013-02-11 18:05:13

标签: oracle devart

我们正在尝试使用Devart Oracle适配器,但是现有的代码与Oracle的DataAccess DLL一起出现问题。我们在command.ExecuteNonQuery()上收到以下示例错误:

  

ORA-01400:无法插入NULL   ( “数据库名”, “表名”。 “COL3”)

以下是一些示例代码:

const string query = @"INSERT INTO table_name (table_name_id, col1, col2, col3)
    VALUES(table_name_id_seq.nextval, :col1, :col2, :col3)
    RETURNING table_name_id INTO :output_id";
OracleParameter outputParam = new OracleParameter(":output_id", OracleDbType.Long, ParameterDirection.Output);
OracleParameter[] parameters = new OracleParameter[]
{
    outputParam,
    new OracleParameter(":col1", OracleDbType.VarChar, col1, ParameterDirection.Input),
    new OracleParameter(":col2", OracleDbType.VarChar, col2, ParameterDirection.Input),
    new OracleParameter(":col3", OracleDbType.Long, col3, ParameterDirection.Input)
}

using (OracleCommand command = connection.CreateCommand())
{
    command.CommandText = query;
    command.CommandType = CommandType.Text;
    command.Parameters.AddRange(parameters);
    command.ExecuteNonQuery();
    int outputId = Convert.ToInt32(outputParam.Value.ToString());
}

我们做错了什么?我们尝试使用PK的序列插入一行,并在一个查询中返回该行的PK。

此外,如果我删除查询中的输出参数和返回行,则查询运行正常。

1 个答案:

答案 0 :(得分:0)

感谢您的举报。我们已经复制了这个问题并正在对其进行调查。要解决此问题,请切换到直接模式:http://www.devart.com/dotconnect/oracle/docs/?directmode.html