2015-08-05 3 views
0

У меня есть программа, которая прерывается с перерывами в сложном запросе.Как отлаживать неуловимую ошибку, используя базу данных Progress OpenEdge

Ошибка гласит:

System.Data.SqlClient.SqlException: Не удалось получить строку из OLE DB провайдера "MSDASQL" для связанного сервера "LinkedServer".

Запрос выглядит следующим образом:

SELECT Replace([JOB-NO],'M0','') as KeyTaskID, 
                dbo.SFGET_UniqueTaskID([CLIENT-CODE],Replace([JOB-NO], 'M0', ''), 0, [TRADE-CODE]) AS HMSUniqueTaskID, 
                [LATEST-PRIORITY] AS PriorityCode, 
                [KeyProperty] AS KeyProperty, 
                Replace([JOB-NO],'M0','') AS KeyJob, 
                [JOB-TYPE] as TaskSubType, 
                CONVERT(varchar(6),[MAINT-OFFICER]) AS Officer, 
                LEFT(FORENAME + ' ' + SURNAME, 50) AS OfficerName, 
                [JOB-NO] + ' ' + LEFT(RTRIM(REPLACE([TEXT-LINE], ';', CHAR(13))), 480) AS Description, 
                dbo.SFGET_FormattedDate([TARGET-DATE],0) AS DueDateTime, 
                [CURRENT-STAGE-CODE] AS CurrentStageCode 
               FROM openquery(LinkedServer, ' 
               SELECT DISTINCT 
                "RM-JOB"."JOB-NO", 
                "RM-JOB"."CLIENT-CODE", 
                "RM-JOB"."LATEST-PRIORITY", 
                "RM-JOB"."TRADE-CODE", 
                "RM-JOB"."JOB-TYPE", 
                "RM-JOB"."TARGET-DATE", 
                "RM-JOB"."MAINT-OFFICER", 
                "RM-JOB"."TEXT-LINE", 
                "RM-JOB"."CURRENT-STAGE-CODE", 
                "RM-JOB"."PLACE-REF", 
                "IH_OFFICER".FORENAME, 
                "IH_OFFICER".SURNAME 
               FROM "PUB"."RM-JOB" 
               LEFT OUTER JOIN "PUB"."IH_OFFICER" 
                ON ("IH_OFFICER"."OFFICER-CODE" = "RM-JOB"."MAINT-OFFICER") 
               WHERE "RM-JOB"."JOB-TYPE" = ''GASS'' 
               AND "RM-JOB"."JOB-STATUS" = 06 
               AND "RM-JOB"."CONTRACTOR" = ''NWH001'' ') as ibsTasks 
               INNER JOIN [SVSExtract].[dbo].Property prop 
                ON ibsTasks.[PLACE-REF] = prop.UserCode 

Я тестировал его вручную с помощью SQL Server Management Studio. Это время от времени не работает, но в основном работает нормально.

Я в затруднении относительно того, как я могу отладить ошибку, которую я не могу воспроизвести по своему усмотрению.

Любые предложения?

+0

Является ли тот же самый запрос (в том числе и где), который случайным образом терпит неудачу или отличается от того, где не выполняются предложения? В зависимости от ваших версий OE и уровня доступа к реальному серверу OE существуют различные журналы для проверки/включения. – TheMadDBA

+0

Да. Я получаю различные ошибки, когда он терпит неудачу. наиболее распространенным является «[DataDirect] [ODBC Progress OpenEdge Wire Protocol driver] [OPENEDGE] Ошибка при записи блокировки записи из таблицы PUB.RM-JOB.". Я попытался добавить УРОВЕНЬ ИЗОЛЯЦИИ SET TRANSACTION READ UNCOMMITTED перед тем, как выбрать оператор, но это также не работает. –

+0

Вы пробовали добавить WITH (NOLOCK) по вашему запросу? Я обнаружил, что контроль уровня изоляции через несколько уровней (DSN, Linked server и т. Д.) В лучшем случае проблематичен. – TheMadDBA

ответ

0

Я не профессионал в SqlClients и Progress самостоятельно, но: Progress Knowledgebase может дать вам решение!

This entry, например, описывает аналогичную ошибку, даже если указанная версия может быть старше той, которую вы используете? (Всегда отправляйте версию, когда спрашиваете об OpenEdge - там много старых установок, и за последние пару лет прогресс немного изменился).

База знаний честно лучше всего искали с помощью Google:

Поиск Например: site:knowledgebase.progress.com MSDASQL и вы получите 48 results.

Смежные вопросы