Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python HY090-无效的字符串或缓冲区长度(0)_Python_Sql Server_Python 3.x_Odbc_Pyodbc - Fatal编程技术网

Python HY090-无效的字符串或缓冲区长度(0)

Python HY090-无效的字符串或缓冲区长度(0),python,sql-server,python-3.x,odbc,pyodbc,Python,Sql Server,Python 3.x,Odbc,Pyodbc,我试图通过使用带有许多insert语句的.sql文件向表中插入数据 声明如下: INSERT [dbo].[table_name] ([col1], [col2], [col3], [col4], [col5], [col6], [col7], [col8], [col9], [col10], [col11], [col12], [col13], [col14], [col15], [col16], [col17], [col18], [col19], [col20], [col21], [co

我试图通过使用带有许多insert语句的.sql文件向表中插入数据

声明如下:

INSERT [dbo].[table_name] ([col1], [col2], [col3], [col4], [col5], [col6], [col7], [col8], [col9], [col10], [col11], [col12], [col13], [col14], [col15], [col16], [col17], [col18], [col19], [col20], [col21], [col22], [col23], [col24], [col25]) VALUES (N'01111', N'SOME RANDOM NAME', N'ABCDE', N'Times', N'ABCD', N'0#aa:', N'06', N'SM', N'123 Cerfdty', N'NULL', N'SM', N'NULL', N'NULL', N'000', N'o2:aq', N'wef0', N'000', N'xx:xx', N'xxxxx', N'ZM', NULL, NULL, NULL, NULL, NULL)
GO
每个语句单独执行,然后通过读取文件提交

但在完成大约240条insert语句后,我得到以下错误:

pyodbc.Error:('HY090','[HY090][Microsoft][ODBC驱动程序管理器]无效的字符串或缓冲区长度(0)(SQLExecDirectW)'

  • Python:3
  • pyodbc:4.0.17
  • 操作系统:Windows 10
  • DB:microsoftsqlserver
  • 司机: ['SQL Server', “SQL Server本机客户端11.0”, “SQL Server的ODBC驱动程序13”, “SQL Server的ODBC驱动程序17”]
我尝试使用上述驱动器进行连接。但我在所有驱动程序选项中都会遇到相同的错误。我正在本地计算机上运行以连接Microsoft SQL server

当我开始阅读有关此问题的文章时,我在Microsoft下找到了以下文档:

HY090 |无效字符串或缓冲区长度|(DM)缓冲区长度中的值小于0。(请参阅SQLSetDescField中SQL_DESC_DATA_PTR字段的说明。)

需要设置一些绑定参数来清除缓冲区,但我认为在pyodbc中没有任何可用的信息或选项

我很可能偏离了这个问题的最初原因

try:
    with open(filename,'r') as sqlfile:
        sql_query = ''
        count =0
        for line in sqlfile:
            if 'GO' in line:
                cursor.execute(sql_query)
                sql_query = ''
                conn.commit()
                count = count +1
                print(count)
            elif 'PRINT' in line:
                display = line.split("'")[1]
                print(display)
            else:
                sql_query = sql_query + line 
        sqlfile.close()
except pyodbc.ProgrammingError as error:
    print(error)
请帮我解决这个问题

try:
    with open(filename,'r') as sqlfile:
        sql_query = ''
        count =0
        for line in sqlfile:
            if 'GO' in line:
                cursor.execute(sql_query)
                sql_query = ''
                conn.commit()
                count = count +1
                print(count)
            elif 'PRINT' in line:
                display = line.split("'")[1]
                print(display)
            else:
                sql_query = sql_query + line 
        sqlfile.close()
except pyodbc.ProgrammingError as error:
    print(error)

pyodbc 4.0.17相当陈旧。你能试着使用pyodbc 4.0.25,看看它是否工作得更好吗?您好,Gord,我刚刚将pyodbc升级到新版本,并再次尝试运行。我也遇到了同样的问题,这个问题解决了吗?