2016-11-18 1 views
1

Я хочу, чтобы выполнить процедуру и получить выходные параметры"(u'24000' , и '[24000] [Microsoft] [ODBC SQL Server Driver] Invalid Cursor State)" в питона pypyodbc

import pypyodbc 

command = "DECLARE @l_Stat INT \r\n" \ 
        "DECLARE @s_Ms VARCHAR(200) \r\n" \ 
        "EXEC p_Log_InsertParam_2011v1 " \ 
        "@l_TesterId=?, " \ 
        "@l_ObiektId=?, " \ 
        "@l_RejPId=?, " \ 
        "@s_ParamName=?, " \ 
        "@f_ParamValue=?, " \ 
        "@f_ParamMinValue=?, " \ 
        "@f_ParamMaxValue=?, " \ 
        "@b_CheckParam=?, " \ 
        "@[email protected]_Stat output, " \ 
        "@[email protected]_Ms output \r\n" \ 
        "SELECT @l_Stat, @s_Ms\r\n" 
connection = pypyodbc.connect(self.ConnectionString) 
cursor = connection.cursor() 
params=(453879185, 23192812, 645872, '/APL/CTRL_GZ/PID/SP', 35.0, 0, 0, True) 
# params = (testerid, 
#   obiektid, 
#   rejpid, 
#   paramname, 
#   paramvalue, 
#   paramminvalue, 
#   parammaxvalue, 
#   checkparam) """ 
result = cursor.execute(command, params) 
pars = result.fetchall()[0] 
print pars 
if pars.__len__() >= 2: 
    l_status = pars[0] 
    s_msg = pars[1] 
print "{}: {};".format(l_status, s_msg) 

Он хорошо работает с линией result = cursor.execute(command, params) - процедура выполняется правильно. Проблема возникает, когда я пытаюсь получить результат в строке pars = result.fetchall()[0]:

u'24000', u'[24000] [Microsoft][ODBC SQL Server Driver]Invalid Cursor State' 

Как я могу избавиться от этой ошибки?

+0

Это случайно связано с кодировкой символов? u24000 может быть [символьным кодом для этого символа HAN] (http://en.glyphwiki.org/wiki/u24000). Такие * дальневосточные символы * имеют тенденцию создавать странные проблемы, используемые в кодировках, таких как 'UTF-8', где их кодировка занимает три байта, иногда даже четыре. Несколько инструментов не могут справиться с этим. – Shnugo

+0

@ Шнуго - Я так не думаю. –

ответ

1

Я был в состоянии воспроизвести проблему, когда мой p_Log_InsertParam_2011v1 хранимая процедура сделал не имеют

SET NOCOUNT ON; 

в качестве первого исполняемого оператора. Когда я добавил его в начале моей хранимой процедуры, ошибка исчезла.

+0

Теперь это работает :) Спасибо. –

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