Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / jdbc + call MS SQL SP ошибка Инструкция не вернула результирующий набор / 9 сообщений из 9, страница 1 из 1
19.03.2013, 16:55:42
    #38190133
VladislavVV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jdbc + call MS SQL SP ошибка Инструкция не вернула результирующий набор
привет
есть простая StoredProc MS SQL2005
возвращает список сотрудников в зависимости от @ViewFlag
Код: 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.
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.
77.
78.
79.
80.
81.
82.
83.
84.
85.
CREATE PROCEDURE [dbo].[up_OK_BRO_S_TrudSpisok]
                                        @Help  char(2)=null,
                                        @Debug char(3)='OFF',

                                        @ViewFlag int
AS
BEGIN
 
 SET NOCOUNT ON
 
 IF @Help IS NULL GOTO Help
 IF @Debug='ON' PRINT 'Dedug=ON'
 
 IF @ViewFlag=2
 BEGIN
 SELECT A.[IDTrud], A.[TabNo],
        RTRIM(A.[Fam]) AS [Fam], RTRIM(A.[Name]) AS [Name],  RTRIM(A.[Otch]) AS [Otch],
        A.[WorkStatus],
        CASE A.[WorkStatus]
         WHEN 0 THEN ''
         WHEN 1 THEN 'ó'
         WHEN 2 THEN '?'
        END AS [WStatusSTR],
        G.[NameDol], R.[NameRazr],
        CONVERT(CHAR(10), A.[DateIn], 103) AS [DateInSTR],
        CASE A.[WorkStatus]
         WHEN 0 THEN ''
         WHEN 1 THEN CONVERT(CHAR(10), A.[DateOut], 103)
         WHEN 2 THEN ''
        END AS [DateOutSTR]

 FROM [dbo].[OK_WTB_Trud] AS A
      LEFT OUTER JOIN [dbo].[SR_ALL_Dolzh] AS G
      ON A.[IDDolzh]=G.[IDDolzh]
      LEFT OUTER JOIN [dbo].[SR_ALL_Razr] AS  R
      ON A.[IDRazr]=R.[IDRazr]

 ORDER BY A.[Fam] ASC,
          A.[Name] ASC,
           A.[Otch] ASC

 END--@ViewFlag=1
 

 IF @ViewFlag IN (0,1)
 BEGIN
 SELECT A.[IDTrud], A.[TabNo],
        RTRIM(A.[Fam]) AS [Fam], RTRIM(A.[Name]) AS [Name],  RTRIM(A.[Otch]) AS [Otch],
        A.[WorkStatus],
        CASE A.[WorkStatus]
         WHEN 0 THEN ''
         WHEN 1 THEN 'ó'
         WHEN 2 THEN '?'
        END AS WStatusSTR,
        G.[NameDol], R.[NameRazr],
        CONVERT(CHAR(10), A.[DateIn], 103) AS [DateInSTR],
        CASE A.[WorkStatus]
         WHEN 0 THEN ''
         WHEN 1 THEN CONVERT(CHAR(10), A.[DateOut], 103)
         WHEN 2 THEN ''
        END AS [DateOutSTR]

 FROM [dbo].[OK_WTB_Trud] AS A
      LEFT OUTER JOIN [dbo].[SR_ALL_Dolzh] AS G
      ON A.[IDDolzh]=G.[IDDolzh]
      LEFT OUTER JOIN [dbo].[SR_ALL_Razr] AS  R
      ON A.[IDRazr]=R.[IDRazr]

 WHERE A.[WorkStatus]=@ViewFlag
 
 ORDER BY A.[Fam] ASC,
          A.[Name] ASC,
           A.[Otch] ASC

 END--@ViewFlag=in
 GOTO EndProc

Help:
 PRINT '--------------------------------------------------------------------------------'
 PRINT 'Description  :        '
 PRINT '--------------------------------------------------------------------------------'
 RETURN -1

EndProc:
END



вызываю хранимку из класса

Код: java
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.
public class GetListTrud
{           
    private CallableStatement сst;
    private ResultSet rs;
    private Boolean fillDataResult;
    private String fillDataStr;
    
    //constructors
    public GetListTrud()
      {                
        сst=null;
        rs=null;
        fillDataResult=false;
        fillDataStr   ="";       
      }

    
    //methods, etc       
    
         
    //заполняем данными список    
    public void FillData(Connection con, String DBName, Integer viewflag)           
      {
       if (con==null) {return;};
       
       if (viewflag<0 | viewflag>2 | DBName.length()==0) 
       {
           this.fillDataResult=false;
           this.fillDataStr="Неверные параметры для выполнения SP.";
           return;
       }                           
       try
          {
              this.fillDataResult=true;           
              сst=con.prepareCall("{call [dbo].[up_OK_BRO_S_TrudSpisok](?,?,?)}");
              сst.setString(1, "NH");
              сst.setString(2, "OFF");
              сst.setInt(3, viewflag);
       
              rs=сst.executeQuery();                            
              
          } catch (Exception e)
          {
           this.fillDataResult=false;
           this.fillDataStr="Невозможно выполнить SP:"+"<br>"+e.getMessage();
          }
      }//filldata
                 
    
  }



получаю результат
Код: java
1.
2.
Невозможно выполнить SP:
Инструкция не вернула результирующий набор. 



подскажите, что не так
спс

ps само собой, что данные есть в таблицах, права на запуск есть, коннект к базе есть
...
Рейтинг: 0 / 0
19.03.2013, 17:22:53
    #38190226
Troglodit
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jdbc + call MS SQL SP ошибка Инструкция не вернула результирующий набор
SET NOCOUNT OFF забыл,ИМХО.
...
Рейтинг: 0 / 0
19.03.2013, 17:41:04
    #38190273
VladislavVV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jdbc + call MS SQL SP ошибка Инструкция не вернула результирующий набор
Troglodit, не помогает

с синтаксисом и логикой джава класса у меня все ок?
я новичек в этом вопросе
...
Рейтинг: 0 / 0
19.03.2013, 17:51:07
    #38190297
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jdbc + call MS SQL SP ошибка Инструкция не вернула результирующий набор
VladislavVVTroglodit, не помогает

с синтаксисом и логикой джава класса у меня все ок?
я новичек в этом вопросе
ну если ХП можешь править, напиши там
select from 1
и проверяй
...
Рейтинг: 0 / 0
19.03.2013, 17:54:27
    #38190302
Troglodit
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jdbc + call MS SQL SP ошибка Инструкция не вернула результирующий набор
Если используется NOCOUNT, ее надо отключать до результирующего запроса. Я на 90 % уверен , что дело в этом.
...
Рейтинг: 0 / 0
19.03.2013, 18:02:29
    #38190315
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jdbc + call MS SQL SP ошибка Инструкция не вернула результирующий набор
Troglodit,
ON вроде и отключает
...
Рейтинг: 0 / 0
19.03.2013, 21:09:59
    #38190538
Troglodit
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jdbc + call MS SQL SP ошибка Инструкция не вернула результирующий набор
Petro123,
Он включает NOCOUNT,т.е. количество записей неизвестно.
Обычно это идет в паре:

SET NOCOUNT ON
код
SET NOCOUNT OFF
select ...
...
Рейтинг: 0 / 0
20.03.2013, 15:18:40
    #38191544
VladislavVV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jdbc + call MS SQL SP ошибка Инструкция не вернула результирующий набор
Проблема решилась. Виноват был я, так как неправильно организовал работу класса GetListTrud.
В остальном-все работает замечательно.
Пользовался этим ресурсом: MSDN:Using Statements with Stored Procedures

рабочий класс
Код: java
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.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
import java.sql.*;

public class GetListTrud
 {
    private Connection c;
    private Integer viewflag;
    //private Statement cst;
    private PreparedStatement cst;
    private ResultSet rs;
    private Boolean fillDataResult;
    private String fillDataStr;
    
    //constructors
    public GetListTrud()
      {        
        c=null;
        viewflag=-1;
        cst=null;
        rs=null;
        fillDataResult=false;
        fillDataStr   ="";       
      }

    public GetListTrud(Connection con, Integer viewflag)
      {
        this.c=con;
        this.viewflag=viewflag;
        cst=null;
        rs=null;
        fillDataResult=false;
        fillDataStr   ="";  
      }
    
    //methods, etc       
    public ResultSet getRs()
      {
        return rs;        
      }

    public Boolean getFillDataResult()
      {
        return fillDataResult;
      }

    public String getFillDataStr()
      {
        return fillDataStr;
      }
    
         
    //заполняем данными список    
    public void FillData()  
      {
       if (c==null) 
       {
         this.fillDataResult=false;
         this.fillDataStr="Неверные параметры для выполнения SP. (c=null)";
         return;
       }       
       if (viewflag<0 | viewflag>2) 
       {
         this.fillDataResult=false;
         this.fillDataStr="Неверные параметры для выполнения SP. (viewflag="+viewflag.toString()+")";
         return;
       }                      
       try           
          {
            this.cst = c.prepareStatement("{call [dbo].[up_OK_BRO_S_TrudSpisok](?,?,?)}");
            this.cst.setString(1, "'NH'");
            this.cst.setString(2, "'OFF'");
            this.cst.setInt(3, 0);
            this.rs = cst.executeQuery();              
            this.fillDataResult=true;
             
          } catch (Exception e)
          {
           this.fillDataResult=false;
           this.fillDataStr="Невозможно выполнить SP:"+"<br>"+e.getMessage();          
          }
      }//filldata
          
    
    public void CloseStatement()
      {
        if (this.rs!=null) 
        {
            try
            {
             rs.close();    
            } catch (Exception e)
            {
            }
            
        }
        if (this.cst!=null) 
        {         
            try
            {
              this.cst.close();     
            } catch (Exception e)
            {
            }
        }
      }
    
  }



кстати, SP работает без SET NOCOUNT ON
...
Рейтинг: 0 / 0
20.03.2013, 15:22:30
    #38191549
VladislavVV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jdbc + call MS SQL SP ошибка Инструкция не вернула результирующий набор
oops! строку
Код: java
1.
this.cst.setInt(3, 0);


следует заменить на
Код: java
1.
this.cst.setInt(3, this.viewflag);
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / jdbc + call MS SQL SP ошибка Инструкция не вернула результирующий набор / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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