Я пытаюсь создать подготовленный оператор в С#.
По какой-то причине все, что я пробую, заканчивается удалением.
Это мой код:
using (OracleCommand cmd = new OracleCommand())
{
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "insert into daily_cdr_logs " +
"(message) " +
"values " +
"(:message)";
cmd.Parameters.Add(:message, msg);
//OracleDbType.Int32, postpaid_duration, ParameterDirection.Input);
cmd.Prepare();
cmd.ExecuteNonQuery();
}
Я получаю освобождение: "Операция недействительна из-за текущего состояния объекта".
Типичный готовый оператор Oracle выглядит следующим образом.
(обратите внимание, что только определение в подготовленном выражении имеет двоеточие :
, а одно в вызове cmd.Parameters.AddWithValue
не работает)
String msg = "something here";
using (OracleConnection con = new OracleConnection(...insert connection params here...))
{
con.Open();
OracleCommand cmd = con.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = @"
insert into daily_cdr_logs
(message)
values
(:message)";
cmd.Parameters.AddWithValue("message", msg);
cmd.ExecuteNonQuery();
}
Я предлагаю сделать это вот так:
//create a connection
string conString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionName"].ConnectionString;
OracleConnection con = new OracleConnection(conString);
//create SQL and insert parameters
OracleCommand cmd = new OracleCommand("insert into daily_cdr_logs (message) values (:_message)", con);
cmd.Parameters.Add(new OracleParameter("_message", msg));
try
{
//if connection is closed, open it
if (con.State == ConnectionState.Closed)
con.Open();
//execute query
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
//do something with the error
}
finally
{
//if connection is open, close it
if (con.State == ConnectionState.Open)
con.Close();
}
Я создал свою строку подключения в моем файле web.config, продемонстрировал здесь.