【问题标题】:"(u'24000', u'[24000] [Microsoft][ODBC SQL Server Driver]Invalid Cursor State)" in python pypyodbc“(u'24000',u'[24000] [Microsoft][ODBC SQL Server Driver]Invalid Cursor State)”在python pypyodbc
【发布时间】:2016-11-18 12:11:43
【问题描述】:

我要执行程序并获取输出参数

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=?, " \
                  "@l_Status=@l_Stat output, " \
                  "@s_Msg=@s_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'

我怎样才能摆脱这个错误?

【问题讨论】:

  • 这是否与字符编码有关? u24000 可能是character code for this HAN-symbol。这样的 far-east-characters 往往会在UTF-8 等编码中产生奇怪的问题,它们的编码需要三个字节,有时甚至是四个字节。有几个工具无法解决这个问题。
  • @Shnugo - 我不这么认为。

标签: python sql-server python-2.7 stored-procedures pypyodbc


【解决方案1】:

当我的p_Log_InsertParam_2011v1 存储过程没有

时,我能够重现您的问题
SET NOCOUNT ON;

作为它的第一个可执行语句。当我在存储过程的开头添加它时,错误就消失了。

【讨论】:

  • 这为我修复了它以及在 Windows 上运行。在带有 FreeTDS 的 Linux 上没有问题。在两台机器上使用 pypyodbc。
猜你喜欢
  • 1970-01-01
  • 2014-01-02
  • 1970-01-01
  • 2023-03-10
  • 2013-04-14
  • 2017-12-13
  • 1970-01-01
  • 2016-01-04
  • 1970-01-01
相关资源
最近更新 更多