Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Возврат результата функции / 6 сообщений из 6, страница 1 из 1
24.10.2008, 12:33
    #35614226
Repz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возврат результата функции
Собственно, не разберусь не как как получить резултат функции из Oracle
(Select func(1) from dual не катит - так как внутри функции DML операции).

Кто может подсказать ?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
private static int GetProjectID(OleDbConnection oleConnection, OleDbTransaction oleTransaction, ClientClass Client, int WorkerID)
        {
            int iResult = int.MinValue;

            string strSQL = @"
                                declare
                                    result1 number := null;
                                begin 
                                    result1 := DATAMART_PKG.GET_PROJECT_NAME ( 1, 2);
                                end;
                            ";

            OleDbCommand oleCommand = null;
            try
            {
                oleCommand = new OleDbCommand(strSQL, oleConnection); /* !!! НЕ РАБОТАЕТ !!!*/
                
                if (oleTransaction != null)
                {
                    oleCommand.Transaction = oleTransaction;
                }
                object obj = oleCommand.ExecuteNonQuery(); /*СЮДА БЫ РЕЗУЛЬТАТ ПОЛУЧИТЬ !!!*/
                
                int tmpProjectID;
                if ((obj != null) && (Int32.TryParse(obj.ToString(), out tmpProjectID) == true))
                {
                    /// случай заболевания был найден
                    iResult = tmpProjectID;
                }
                else
                {
                    /// случай заболевания не был найден ... надо его создать
                    ...
                    iResult = ...;
                }
            }
            catch (Exception exc)
            {
                iResult = int.MinValue;
            }

            return iResult; 
        }
...
Рейтинг: 0 / 0
24.10.2008, 13:14
    #35614374
Dmitry E. Loginov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возврат результата функции
Для начала как минимум попробуй переделать команду SQL

Код: plaintext
1.
2.
3.
4.
5.
            string strSQL = @"
                                begin 
                                    [color=red]:[/color]result1 := DATAMART_PKG.GET_PROJECT_NAME ( 1, 2);
                                end;
                            ";

После этого у oleCommand должен появиться соответствующий OUT параметр, через который можно получить значение.
...
Рейтинг: 0 / 0
24.10.2008, 13:15
    #35614378
Dmitry E. Loginov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возврат результата функции
Эх, не сумел воспользоваться форматированием :( идея в том, что необходимо объявить bind переменную, в которую будет возвращен результат - просто добавить двоеточие перед result1
...
Рейтинг: 0 / 0
24.10.2008, 13:42
    #35614477
Repz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возврат результата функции
Dmitry E. Loginov,

Спасибо, разобрался ...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
string strSQL = @"
                            begin
                                HOSPITAL_.DATAMART_PKG.GET_PROJECT_NAME ( ?, ?, ?);
                            end;
                            ";

....

OleDbCommand oleCommand = null;
            try
            {
                oleCommand = new OleDbCommand(strSQL, oleConnection);
                oleCommand.CommandType = CommandType.Text;

                OleDbParameter param1 = new OleDbParameter("var1", 1068257);
                oleCommand.Parameters.Add(param1);

                OleDbParameter param2 = new OleDbParameter("var2", 11636);
                oleCommand.Parameters.Add(param2);

                OleDbParameter param3 = new OleDbParameter("var3", 10);
                param3.Direction = ParameterDirection.InputOutput;
                oleCommand.Parameters.Add(param3);

                if (oleTransaction != null)
                {
                    oleCommand.Transaction = oleTransaction;
                }
                oleCommand.ExecuteNonQuery();
                
                object obj = null;
                if (oleCommand.Parameters != null && oleCommand.Parameters["var3"] != null)
                {
                    obj = oleCommand.Parameters["var3"].Value;

                    if (obj == null || int.TryParse(obj.ToString(), out iResult) == false)
                    {
                        throw new Exception("Ошибка при создании записи!!!");
                    }
                }
                else
                {
                    throw new Exception("Ошибка при создании записи!!!");
                }
                /// iResult = int.MinValue;
                
            }




...
Рейтинг: 0 / 0
24.10.2008, 13:48
    #35614495
Dmitry E. Loginov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возврат результата функции
Код: plaintext
1.
2.
3.
begin
  HOSPITAL_.DATAMART_PKG.GET_PROJECT_NAME ( ?, ?, ?);
end;
так это вообще оказалась хронь с OUT параметром, а не функция?
...
Рейтинг: 0 / 0
26.10.2008, 12:56
    #35616534
Repz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возврат результата функции
Да, сделал на "хрень" с выходным параметром ...
так как в функцией все еще не ясно как параметры получать ...
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Возврат результата функции / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]