C # эквивалент подготовленного заявления Java

2

Я пытаюсь создать подготовленный оператор в С#.

По какой-то причине все, что я пробую, заканчивается удалением.

Это мой код:

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();
}

Я получаю освобождение: "Операция недействительна из-за текущего состояния объекта".

  • 1
    Без подробностей об исключениях мы ничем не можем помочь.
  • 0
    "исключение" - что (с)? Можете ли вы дать тип и сообщение об этих исключениях?
Показать ещё 9 комментариев
Теги:
prepared-statement

2 ответа

1

Типичный готовый оператор 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();
}
  • 0
    у меня уже есть открытое соединение, и он не может найти AddWithValue
0

Я предлагаю сделать это вот так:

//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, продемонстрировал здесь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню