Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Soa777
0 / 0 / 0
Регистрация: 10.07.2012
Сообщений: 10
1

Не отрабатывает запрос!

10.07.2012, 09:57. Просмотров 613. Ответов 9
Метки нет (Все метки)

Добрый день люди добрые! У меня такая проблема 2-ой день голову ломаю..база данных Oracle...есть хранимая процедура GetAgrDocInfoPage2:

SQL
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
GetAgrDocInfoPage2(vstart IN INTEGER,vcount IN INTEGER,vdoctype IN string,
vdocid IN INTEGER,vdocnum IN string,
vdocnumpefix IN string, vdocnumsuffix IN string,
vrevis IN string, vshifr IN string,
vnc IN string, pResult OUT SYS_REFCURSOR)
IS
  FromID  INTEGER;
  ToID  INTEGER;
BEGIN
FromID := vstart;
ToID := vstart + vcount - 1;
 OPEN pResult FOR 
 SELECT * FROM(
SELECT a.doc_type,a.doc_id,a.doc_num,a.doc_num_pefix,a.doc_num_suffix,a.revis,a.shifr,a.nc, rownum rw  FROM  agr_doc_info a 
WHERE  (a.doc_type = UPPER (vdoctype) OR vdoctype IS NULL)
       AND (a.doc_id = vdocid OR vdocid IS NULL)
       AND (a.doc_num = UPPER(vdocnum) OR vdocnum IS NULL)
       AND (a.doc_num_pefix = UPPER(vdocnumpefix) OR vdocnumpefix IS NULL)
       AND (a.doc_num_suffix = UPPER(vdocnumsuffix) OR vdocnumsuffix IS NULL)
       --AND (date_reg BETWEEN   (:date_reg OR :date_reg IS NULL) )
       AND (a.revis = UPPER(vrevis) OR vrevis IS NULL)
       AND (a.shifr = UPPER(vshifr) OR vshifr IS NULL)
       AND (a.nc = vnc OR vnc IS NULL)) 
 WHERE  rw>=FromID  AND rw<=ToID;
END;
и ещё одна CountAgrDocInfo2, для кол-ва записей:

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CountAgrDocInfo2(vdoctype IN Varchar2,
vdocid IN INTEGER,vdocnum IN Varchar2,
vdocnumpefix IN Varchar2, vdocnumsuffix IN Varchar2,
vrevis IN Varchar2, vshifr IN Varchar2,
vnc IN Varchar2,pDocId OUT INTEGER)
AS
BEGIN
SELECT COUNT(DOC_ID) INTO pDocId FROM agr_doc_info 
WHERE  (doc_type = UPPER (vdoctype) OR vdoctype IS NULL)
       AND (doc_id = vdocid OR vdocid IS NULL)
       AND (doc_num = UPPER(vdocnum) OR vdocnum IS NULL)
       AND (doc_num_pefix = UPPER(vdocnumpefix) OR vdocnumpefix IS NULL)
       AND (doc_num_suffix = UPPER(vdocnumsuffix) OR vdocnumsuffix IS NULL)
       --AND (date_reg BETWEEN   (:date_reg OR :date_reg IS NULL) )
       AND (revis = UPPER(vrevis) OR vrevis IS NULL)
       AND (shifr = UPPER(vshifr) OR vshifr IS NULL)
       AND (nc = vnc OR vnc IS NULL);
END;
и соответственно есть методы для ObjectDataSource для выбора данных при передаче параметров из textBox:
вот метод для выборки:

C#
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
[DataObjectMethod(DataObjectMethodType.Select, true)]
    public AgrDocInfo[] GetAgrDocInfo(int startRowIndex, int maximumRows, string vdoctype, int vdocid, string vdocnum, string vdocnumpefix, string vdocnumsuffix, string vrevis,
        string vshifr, string vnc)
    {
        OracleConnection con = new OracleConnection(connectionString); 
          OracleCommand cmd = new OracleCommand("GRPO.GetAgrDocInfoPage2", con);
        cmd.CommandType = CommandType.StoredProcedure;
           cmd.Parameters.Add(new OracleParameter("vstart", OracleDbType.Decimal, 4));
        cmd.Parameters["vstart"].Value = Convert.ToDecimal(startRowIndex + 1);
        cmd.Parameters.Add(new OracleParameter("vcount", OracleDbType.Decimal, 4));
        cmd.Parameters["vcount"].Value = Convert.ToDecimal(maximumRows);
        cmd.Parameters.Add(new OracleParameter("vdoctype", OracleDbType.Varchar2, 20));
        cmd.Parameters["vdoctype"].Value = vdoctype;
        cmd.Parameters.Add(new OracleParameter("vdocid", OracleDbType.Decimal, 4));
        cmd.Parameters["vdocid"].Value = Convert.ToDecimal(vdocid);
        cmd.Parameters.Add(new OracleParameter("vdocnum", OracleDbType.Varchar2, 255));
        cmd.Parameters["vdocnum"].Value = vdocnum;
        cmd.Parameters.Add(new OracleParameter("vdocnumpefix", OracleDbType.Varchar2, 25));
        cmd.Parameters["vdocnumpefix"].Value = vdocnumpefix;
        cmd.Parameters.Add(new OracleParameter("vdocnumsuffix", OracleDbType.Varchar2, 74));
        cmd.Parameters["vdocnumsuffix"].Value = vdocnumsuffix;
        cmd.Parameters.Add(new OracleParameter("vrevis", OracleDbType.Varchar2, 30));
        cmd.Parameters["vrevis"].Value = vrevis;
        cmd.Parameters.Add(new OracleParameter("vshifr", OracleDbType.Varchar2, 300));
        cmd.Parameters["vshifr"].Value = vshifr;
        cmd.Parameters.Add(new OracleParameter("vnc", OracleDbType.Varchar2, 20));
        cmd.Parameters["vnc"].Value = vnc;
        OracleParameter pResult = new OracleParameter()
        {
            ParameterName = "pResult",
            Direction = ParameterDirection.Output,
            OracleDbType = OracleDbType.RefCursor
        };
 
        cmd.Parameters.Add(pResult);
        ArrayList employees = new ArrayList();
        object par;
        try
        {
            con.Open();
                       OracleDataReader reader = cmd.ExecuteReader();
            par = cmd.Parameters["pResult"].Value;
                      while (reader.Read())
            {
                Decimal? docid;
                string doctype, docnum, docnumpefix, docnumsuffix, revis, shifr, nc;
                if (reader["doc_id"] == DBNull.Value)
                    docid = null;
                else
                    docid = (decimal?)reader["doc_id"];
                doctype = reader["doc_type"] == DBNull.Value ? null : reader["doc_type"].ToString();
                docnum = reader["doc_num"] == DBNull.Value ? null : reader["doc_num"].ToString();
                docnumpefix = reader["doc_num_pefix"] == DBNull.Value ? null : reader["doc_num_pefix"].ToString();
                docnumsuffix = reader["doc_num_suffix"] == DBNull.Value ? null : reader["doc_num_suffix"].ToString();
                revis = reader["revis"] == DBNull.Value ? null : reader["revis"].ToString();
                shifr = reader["shifr"] == DBNull.Value ? null : reader["shifr"].ToString();
                nc = reader["nc"] == DBNull.Value ? null : reader["nc"].ToString();
                AgrDocInfo employ = new AgrDocInfo(doctype, docid, docnum,
                    docnumpefix, docnumsuffix, revis, shifr,
                    nc);
                employees.Add(employ);
            }
 
                     reader.Close();
 
            return (AgrDocInfo[])employees.ToArray(typeof(AgrDocInfo));
        }
        catch (OracleException err)
        {
                        throw new ApplicationException(err.Message);
        }
        finally
        {
            con.Close();
        }
    }
это для страничного просмотра:

C#
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
public int CountAgrDocInfo2(int startRowIndex, int maximumRows, string vdoctype, int vdocid, string vdocnum, string vdocnumpefix, string vdocnumsuffix, string vrevis,
        string vshifr, string vnc)
    {
        decimal pCount;
              OracleConnection con = new OracleConnection(connectionString);
            OracleCommand cmd = new OracleCommand("GRPO.CountAgrDocInfo2", con);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add(new OracleParameter("vdoctype", OracleDbType.Varchar2, 20));
        cmd.Parameters["vdoctype"].Value = vdoctype;
        cmd.Parameters.Add(new OracleParameter("vdocid", OracleDbType.Decimal, 4));
        cmd.Parameters["vdocid"].Value = Convert.ToDecimal(vdocid);
        cmd.Parameters.Add(new OracleParameter("vdocnum", OracleDbType.Varchar2, 255));
        cmd.Parameters["vdocnum"].Value = vdocnum;
        cmd.Parameters.Add(new OracleParameter("vdocnumpefix", OracleDbType.Varchar2, 25));
        cmd.Parameters["vdocnumpefix"].Value = vdocnumpefix;
        cmd.Parameters.Add(new OracleParameter("vdocnumsuffix", OracleDbType.Varchar2, 74));
        cmd.Parameters["vdocnumsuffix"].Value = vdocnumsuffix;
        cmd.Parameters.Add(new OracleParameter("vrevis", OracleDbType.Varchar2, 30));
        cmd.Parameters["vrevis"].Value = vrevis;
        cmd.Parameters.Add(new OracleParameter("vshifr", OracleDbType.Varchar2, 300));
        cmd.Parameters["vshifr"].Value = vshifr;
        cmd.Parameters.Add(new OracleParameter("vnc", OracleDbType.Varchar2, 20));
        cmd.Parameters["vnc"].Value = vnc;
        OracleParameter pDocId = new OracleParameter()
        {
            ParameterName = "pDocId",
            Direction = ParameterDirection.Output,
            OracleDbType = OracleDbType.Decimal
        };
        cmd.Parameters.Add(pDocId);
        try
        {
            con.Open();
            cmd.ExecuteNonQuery();
            pCount = (decimal)((OracleDecimal)(cmd.Parameters["pDocId"].Value)).Value;
            return Convert.ToInt32(pCount.ToString());
           
        }
        catch (OracleException err)
        {
            throw new ApplicationException(err.Message);
        }
        finally
        {
            con.Close();
        }
    }
Вопрос в том, что если передавать параметр vdocid типа Decimal, то всё отрабатывает норм, а если передать любой параметр типа String ну например vdoctype то выводит 0 записей, хотя на Oracle отрабатывает отлично и выводит записи(там записи точно есть, все столбцы типа Varchar2, кроме одного DOC_ID тип INTEGER)...может кто сталкивался с подобными ситуациями...ПОМОГИТЕ!!!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2012, 09:57
Ответы с готовыми решениями:

Запрос по дате не отрабатывает
Посылаю запрос по дате из приложения: SELECT VISIT.ID, VISIT.V_DATE_VISIT, CLIENT.C_STATUS,...

запрос не отрабатывает в delphi
Запрос находиться в access. В access запрос отрабатывает нормально, при вызове из delphi, запрос не...

Триггер неправильно отрабатывает запрос
Доброго времени суток! У меня появилась следующая проблема - триггер не проверяет условие и всегда...

Не отрабатывает как нужно запрос
Прошу помощи в следующем вопросе.. Задаю запрос. В консоли запросов он отрабатывает правильно но в...

VBScript не отрабатывает запрос SELECT
Добрый вечер. Имею вот такую проблему, от которой уже закипаю: Подключаюсь из excel 2010 к SQL...

9
Hrenochel
6 / 6 / 0
Регистрация: 02.04.2012
Сообщений: 21
10.07.2012, 10:03 2
не знаю не особо разбираюсь в запросах но как я знаю varchar автоматически заполняется пробелами если длина слова меньше указанной, может в этом проблема. а так лучше использовать nvarchar)
0
Soa777
0 / 0 / 0
Регистрация: 10.07.2012
Сообщений: 10
10.07.2012, 12:08  [ТС] 3
Нет дело не в этом я уже пробовал...Varchar2 в Oracle заносится динамически по мере кол-ва данных символов...
Блин что за ерунда не понятно....
Может кто-то ещё что-нибудь ПОСОВЕТУЕТ....
0
sau
2059 / 1646 / 278
Регистрация: 22.07.2011
Сообщений: 6,275
Завершенные тесты: 1
10.07.2012, 12:19 4
Меня вот ток смутило сравнение параметров функции типа string с параметрами типа varchar2, а так же то что в OracleParameter вы указываете типы которые не соответствует типам аргументов функции.
Может вообще тип параметра явно не указывать , пускай оракловый клиент по значению разбирает ?
Кстати , насчет клиента ( System.Data.OracleClient.dll) - версия соответствует версии БД ? , просто я не нашел в своей версии перечисляемый тип OracleDbType

З.Ы В синтаксис запроса не вникал , т.к сами говорите что рабочий ).
З.Ы З.Ы Если исключение не бросает, я бы через профайлер посмотрел какой SQL запрос передается, и попробовал его запустить.
0
nio
5969 / 3375 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
10.07.2012, 12:21 5
Цитата Сообщение от Soa777 Посмотреть сообщение
Может кто-то ещё что-нибудь ПОСОВЕТУЕТ
Если поле числовое, то зачем использовать varchar?
0
Soa777
0 / 0 / 0
Регистрация: 10.07.2012
Сообщений: 10
10.07.2012, 14:02  [ТС] 6
sau я использую Oracle.DataAccess.Client родной провайдер компании Oracle ...тип varchar2 в Oracle тот же как в .net string так что типы должны соответствовать...
sau а как мне профилировщик запустить в VS8 или VS10 ни разу им не пользовался к сожалению?

Добавлено через 3 минуты
nio поля в базе данных как раз varchar2 только одно числовое типа integer в .net эквивалентно decimal, так что все поля текстовые...
0
sau
2059 / 1646 / 278
Регистрация: 22.07.2011
Сообщений: 6,275
Завершенные тесты: 1
10.07.2012, 15:29 7
System.Data.OracleClient - тоже родной , поставляется Oraclе для каждой версии их БД.
Профилировщик я имел ввиду от клиентских утилит Oracle, на подобии как sql server profiler - он показывает все запросы поступившие в БД, таким образом проще косяк в запросе выявить.
На счет параметров , в хранимке они обьявлены как string а вы передаете как OracleDbType.Varchar2, может проблема в преобразовании и нужно что то вроде OracleDbType.String(если есть).
В общем профайлер должен выявить источник проблемы.

З.Ы я бы еще проверку на string.empty делал в запросе или при формировании аргументов. - может в этом косяк ?
0
Soa777
0 / 0 / 0
Регистрация: 10.07.2012
Сообщений: 10
11.07.2012, 13:00  [ТС] 8
Добрый день ребята...вообще не пойму, почему не отрабатывает предыдущие методы, короче всё по порядка:
1. Изменил хранимые процедуры, щас они у меня вообще с одним параметром Varchar2 используются:

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
GetAgrDocInfoPage2(vstart IN INTEGER,vcount IN INTEGER, vdoctype IN Varchar2, pResult OUT SYS_REFCURSOR)
IS
  FromID  INTEGER;
  ToID  INTEGER;
BEGIN
FromID := vstart;
ToID := vstart + vcount - 1;
 OPEN pResult FOR 
 SELECT * FROM(
SELECT a.doc_type,a.doc_id,a.doc_num,a.doc_num_pefix,a.doc_num_suffix,a.revis,a.shifr,a.nc, rownum rw  FROM  agr_doc_info a 
WHERE   (a.doc_type = UPPER (vdoctype) OR vdoctype IS NULL))
      -- AND (a.doc_id = vdocid OR vdocid IS NULL)
       --AND (a.doc_num = UPPER(vdocnum) OR vdocnum IS NULL)
      -- AND (a.doc_num_pefix = UPPER(vdocnumpefix) OR vdocnumpefix IS NULL)
       --AND (a.doc_num_suffix = UPPER(vdocnumsuffix) OR vdocnumsuffix IS NULL)
       --AND (date_reg BETWEEN   (:date_reg OR :date_reg IS NULL) )
       --AND (a.revis = UPPER(vrevis) OR vrevis IS NULL)
       --AND (a.shifr = UPPER(vshifr) OR vshifr IS NULL)
      -- AND (a.nc = vnc OR vnc IS NULL)) 
 WHERE  rw>=FromID  AND rw<=ToID;
END;
/
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CountAgrDocInfo2( vdoctype IN Varchar2,pDocId OUT INTEGER)
AS
BEGIN
SELECT COUNT(DOC_ID) INTO pDocId FROM agr_doc_info 
WHERE (doc_type = UPPER (vdoctype) OR vdoctype IS NULL);
       --AND (doc_id = vdocid OR vdocid IS NULL)
       --AND (doc_num = UPPER(vdocnum) OR vdocnum IS NULL)
       --AND (doc_num_pefix = UPPER(vdocnumpefix) OR vdocnumpefix IS NULL)
       --AND (doc_num_suffix = UPPER(vdocnumsuffix) OR vdocnumsuffix IS NULL)
       --AND (date_reg BETWEEN   (:date_reg OR :date_reg IS NULL) )
       --AND (revis = UPPER(vrevis) OR vrevis IS NULL)
       --AND (shifr = UPPER(vshifr) OR vshifr IS NULL)
       --AND (nc = vnc OR vnc IS NULL);
END;
/
2. Соответственно изменил методы тоже с одним параметром string значение берется с textBox.Text:

C#
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
[DataObjectMethod(DataObjectMethodType.Select, true)]
    public AgrDocInfo[] GetAgrDocInfo(int startRowIndex, int maximumRows, string vdoctype)
    {
        OracleConnection con = new OracleConnection(connectionString); 
          OracleCommand cmd = new OracleCommand("GRPO.GetAgrDocInfoPage2", con);
        cmd.CommandType = CommandType.StoredProcedure;
           cmd.Parameters.Add(new OracleParameter("vstart", OracleDbType.Decimal, 4));
        cmd.Parameters["vstart"].Value = Convert.ToDecimal(startRowIndex + 1);
        cmd.Parameters.Add(new OracleParameter("vcount", OracleDbType.Decimal, 4));
        cmd.Parameters["vcount"].Value = Convert.ToDecimal(maximumRows);
        cmd.Parameters.Add(new OracleParameter("vdoctype", OracleDbType.Varchar2, 20));
        cmd.Parameters["vdoctype"].Value = vdoctype;
        //cmd.Parameters.Add(new OracleParameter("vdocid", OracleDbType.Decimal, 4));
        //cmd.Parameters["vdocid"].Value = Convert.ToDecimal(vdocid);
        //cmd.Parameters.Add(new OracleParameter("vdocnum", OracleDbType.Varchar2, 255));
        //cmd.Parameters["vdocnum"].Value = vdocnum;
        //cmd.Parameters.Add(new OracleParameter("vdocnumpefix", OracleDbType.Varchar2, 25));
        //cmd.Parameters["vdocnumpefix"].Value = vdocnumpefix;
        //cmd.Parameters.Add(new OracleParameter("vdocnumsuffix", OracleDbType.Varchar2, 74));
       // cmd.Parameters["vdocnumsuffix"].Value = vdocnumsuffix;
        //cmd.Parameters.Add(new OracleParameter("vrevis", OracleDbType.Varchar2, 30));
        //cmd.Parameters["vrevis"].Value = vrevis;
       // cmd.Parameters.Add(new OracleParameter("vshifr", OracleDbType.Varchar2, 300));
        //cmd.Parameters["vshifr"].Value = vshifr;
        //cmd.Parameters.Add(new OracleParameter("vnc", OracleDbType.Varchar2, 20));
        //cmd.Parameters["vnc"].Value = vnc;
        OracleParameter pResult = new OracleParameter()
        {
            ParameterName = "pResult",
            Direction = ParameterDirection.Output,
            OracleDbType = OracleDbType.RefCursor
        };
 
        cmd.Parameters.Add(pResult);
        ArrayList employees = new ArrayList();
        object par;
        try
        {
            con.Open();
                       OracleDataReader reader = cmd.ExecuteReader();
            par = cmd.Parameters["pResult"].Value;
                      while (reader.Read())
            {
                Decimal? docid;
                string doctype, docnum, docnumpefix, docnumsuffix, revis, shifr, nc;
                if (reader["doc_id"] == DBNull.Value)
                    docid = null;
                else
                    docid = (decimal?)reader["doc_id"];
                doctype = reader["doc_type"] == DBNull.Value ? null : reader["doc_type"].ToString();
                docnum = reader["doc_num"] == DBNull.Value ? null : reader["doc_num"].ToString();
                docnumpefix = reader["doc_num_pefix"] == DBNull.Value ? null : reader["doc_num_pefix"].ToString();
                docnumsuffix = reader["doc_num_suffix"] == DBNull.Value ? null : reader["doc_num_suffix"].ToString();
                revis = reader["revis"] == DBNull.Value ? null : reader["revis"].ToString();
                shifr = reader["shifr"] == DBNull.Value ? null : reader["shifr"].ToString();
                nc = reader["nc"] == DBNull.Value ? null : reader["nc"].ToString();
                AgrDocInfo employ = new AgrDocInfo(doctype, docid, docnum,
                    docnumpefix, docnumsuffix, revis, shifr,
                    nc);
                employees.Add(employ);
            }
 
                     reader.Close();
 
            return (AgrDocInfo[])employees.ToArray(typeof(AgrDocInfo));
        }
        catch (OracleException err)
        {
                        throw new ApplicationException(err.Message);
        }
        finally
        {
            con.Close();
        }
    }
C#
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
52
53
54
55
public int CountAgrDocInfo2(int startRowIndex, int maximumRows, string vdoctype)
    {
        decimal pCount;
 
        //int qw;
        OracleConnection con = new OracleConnection(connectionString);
        //string str = "SELECT count(DOC_ID) as qwe FROM agr_doc_info WHERE (doc_type = UPPER (:vdoctype) OR :vdoctype IS NULL)";
        //" AND (doc_num = :vdocnum OR :vdocnum IS NULL)" +
        //" AND (doc_num_pefix = :vdocnumpefix OR :vdocnumpefix IS NULL)" +
        //" AND (doc_num_suffix = :vdocnumsuffix OR :vdocnumsuffix IS NULL)" +
        //" AND (revis = :vrevis OR :vrevis IS NULL)" +
        //" AND (shifr = :vshifr OR :vshifr IS NULL)" +
        //" AND (nc = :vnc OR :vnc IS NULL)";
        OracleCommand cmd = new OracleCommand("GRPO.CountAgrDocInfo2", con);
        cmd.CommandType = CommandType.StoredProcedure;
        //cmd.Parameters.Add(new OracleParameter("vdocid", OracleDbType.Decimal, 4));
        //cmd.Parameters["vdocid"].Value = Convert.ToDecimal(vdocid);
        cmd.Parameters.Add(new OracleParameter("vdoctype", OracleDbType.Varchar2, 20));
        cmd.Parameters["vdoctype"].Value = vdoctype;
        //cmd.Parameters.Add(new OracleParameter("vdocnum", OracleDbType.Varchar2, 255));
        //cmd.Parameters["vdocnum"].Value = vdocnum;
        //cmd.Parameters.Add(new OracleParameter("vdocnumpefix", OracleDbType.Varchar2, 25));
        //cmd.Parameters["vdocnumpefix"].Value = vdocnumpefix;
        //cmd.Parameters.Add(new OracleParameter("vdocnumsuffix", OracleDbType.Varchar2, 74));
        //cmd.Parameters["vdocnumsuffix"].Value = vdocnumsuffix;
        //cmd.Parameters.Add(new OracleParameter("vrevis", OracleDbType.Varchar2, 30));
        //cmd.Parameters["vrevis"].Value = vrevis;
        //cmd.Parameters.Add(new OracleParameter("vshifr", OracleDbType.Varchar2, 300));
        //cmd.Parameters["vshifr"].Value = vshifr;
        //cmd.Parameters.Add(new OracleParameter("vnc", OracleDbType.Varchar2, 20));
        //cmd.Parameters["vnc"].Value = vnc;
        OracleParameter pDocId = new OracleParameter()
        {
            ParameterName = "pDocId",
            Direction = ParameterDirection.Output,
            OracleDbType = OracleDbType.Decimal
        };
        cmd.Parameters.Add(pDocId);
        try
        {
            con.Open();
            cmd.ExecuteNonQuery();
            pCount = (decimal)((OracleDecimal)(cmd.Parameters["pDocId"].Value)).Value;
            return Convert.ToInt32(pCount.ToString());
            //return qw;
        }
        catch (OracleException err)
        {
            throw new ApplicationException(err.Message);
        }
        finally
        {
            con.Close();
        }
    }
Все работает через ObjectDataSource...
Итог...всё работает на УРА!!! запросы отрабатывают...
НО когда я передаю в процедуры и методы ещё параметры ну например vdocid, всё ничего не выдаёт запрос не отрабатывает....
Заключение..что за ерунда...где собака зарыта...люди добрые ПОДСКАЖИТЕ!!!

p.s. sau так что дело не в типах и не из-за пустых значений и провайдер отрабатывает...но из-за чего не хочет отрабатывать не пойму...спасибо что откликаетесь))...Может Вы посоветуете какой-нибудь профилировщик Oracle и где можно взять...
0
sau
2059 / 1646 / 278
Регистрация: 22.07.2011
Сообщений: 6,275
Завершенные тесты: 1
11.07.2012, 19:20 9
мм, я с ораклом уже сто лет не сталкивался ) -
но в общем кое что есть в TOAD for Oracle , ну и с помощью DBMS_PROFILER.
Правда на фоне профайлера от MS, это как то убого выглядит ).
Да и без него можно обойтись, если ораклом владеете нормально, то там можно и логи писать - замониторить передаваемые параметры в функцию и т.п., в общем не проблема я думаю.
В конце концов написать простые тесты для своих хранимок.
Имхо на пустом месте проблему создаете ).
0
Soa777
0 / 0 / 0
Регистрация: 10.07.2012
Сообщений: 10
12.07.2012, 08:37  [ТС] 10
Спасибо Всем кто откликнулся на мою проблему...
sau отдельное спасибо...
Проблему решил...всё оказывается банально и просто...короче заклинило у меня, сам виноват
надо было сделать проверку на null значения int поля:

C#
1
2
3
4
if (vdocid == 0)
            cmd.Parameters["vdocid"].Value = null;
        else
            cmd.Parameters["vdocid"].Value = Convert.ToDecimal(vdocid);
И сразу всё заработало...
0
12.07.2012, 08:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2012, 08:37

Почему не отрабатывает запрос GET в Indy-компонентах?
Люди. Есть вопрос. Установлена RadSudio 10.1 Berlin. Впервые сталкиваюсь с Indy. Не могу понять,...

Интересно, но некорректно отрабатывает SQL-запрос
Доброго времени суток всем! Через Delphi обращаюсь к Excel посредством SQL-запроса select * from...

Запрос sql не отрабатывает условие хотя ошибок не выдает
Есть запрос select * from t where t.Update_User ='Кирдан' на прикрепленном скриншоте видно что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru