У меня есть нечто похожее в приложении, над которым я работаю. Этого должно быть достаточно для обзора, но вы, возможно, захотите изменить имена и значения параметров по сравнению с теми, которые мне нужны, когда вы добавите параметр Oracle к cmd
.
.
using(var conn = new OracleConnection("CONNECTIONSTRING")
{
conn.Open();
var cmd = conn.CreateCommand();
cmd.CommandText = "INSERT INTO MYTABLE (ROW_ID, CREATED, STATUS) VALUES (:pROW_ID, :pCREATED, :pSTATUS");
cmd.CommandType = CommandType.Text;
cmd.Parameters.Add(":pROW_ID", OracleDbType.whateverType, "146721030020001", ParameterDirection.Input);
cmd.Parameters.Add(":pCREATED", OracleDbType.whateverType, "SYSDATE", ParameterDirection.Input);
cmd.Parameters.Add(":pASIGNADO", OracleDbType.whateverType, "ON_HOLD", ParameterDirection.Input);
cmd.ExecuteNonQuery();
conn.Close();
}
Примечание. Если ROW_ID является PK и имеет последовательность для автоматической генерации значения, вам нужно использовать связанную с ним последовательность вместо передачи параметра:
cmd.CommandText = "INSERT INTO MYTABLE (ROW_ID, CREATED, STATUS) VALUES (NAME_OF_SEQUENCE.nextval, :pCREATED, :pSTATUS");
Еще одно замечание: если вы хотите выполнять массовые вставки вместо отдельных строк, я настоятельно рекомендую использовать привязку к массиву: http://burnignorance.com/database-tips-and-tricks/bulk-copy-with-oracle-using-array-binding/ производительность довольно велика для больших наборов данных.
В отношении "The value is not within the expected range."
дважды проверьте значение по отношению к столбцу в базе данных, чтобы убедиться, что оно допустимо, и затем используйте правильный OracleDbType
, который соответствует ему.