Как использовать PL / SQL с чистым C #?

#c# #sql #oracle #plsql

#c# #sql #Oracle #plsql

Вопрос:

Я разработал этот небольшой фрагмент кода, чтобы начать с моих маленьких шагов. Соединение хорошее. Простые OdbcDataReader выборки работают нормально. Но я не могу протестировать какие-либо функции PL / SQL. Как это работает? Нужно ли мне устанавливать что-то дополнительное или я делаю что-то не так?

немного вдохновения

 using System;
using System.Data.Odbc;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string connectionString = "dsn=TEST;uid=read;pwd=___";
            OdbcConnection con = new OdbcConnection(connectionString);
            con.Open();

            try
            {
                OdbcCommand cmd = new OdbcCommand("begin end;", con);
                int result = cmd.ExecuteNonQuery();
                cmd.Dispose();
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception);
            }

            con.Close();
            con.Dispose();

            Console.ReadKey();
        }
    }
}
  

Очевидно, что программа PL / SQL:

 begin
end;
  

Сообщение об ошибке выглядит следующим образом:

 System.Data.Odbc.OdbcException (0x80131937): ERROR [HY000] [Oracle][ODBC][Ora]OR
A-06550: line 1, column 7:
PLS-00103: Encountered the symbol "END" when expecting one of the following:

    begin declare exit for goto if loop mod null pragma raise
    return select update while <an identifier>
    <a double-quoted delimited-identifier> <a bind variable> <<
    close current delete fetch lock insert open rollback
    savepoint set sql execute commit forall
    <a single-quoted SQL string>
  

Комментарии:

1. Какую функцию pl / sql вы пытались протестировать?

2. @DanBracuk: begin end; . Это в вопросе.

3. Если это функция, что она должна делать?

4. @DanBracuk Это здесь ничего не должно было делать. Это пошаговый метод изучения чего-то нового. Пожалуйста, проверьте 1-й абзац вопроса.

Ответ №1:

Я думаю, что ваша ошибка находится на стороне PL / SQL, а не на стороне кода c #.

Это недопустимо, поскольку begin ожидается оператор between и end :

 begin end;
  

Это не является недопустимым, поскольку оно содержит оператор, хотя это null; :

 begin null; end;