我们正在试用 Devart Oracle 适配器,但在使用 Oracle 的 DataAccess DLL 的现有代码方面遇到了问题。我们收到以下示例错误command.ExecuteNonQuery()
:
ORA-01400: 无法将 NULL 插入 ("DatabaseName"."table_name"."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。
此外,如果我删除查询中的输出参数和返回行,查询运行良好。