Perl OLE32 MSSQL dateadd 函数结果上的“光标类型已更改”错误

Posted

技术标签:

【中文标题】Perl OLE32 MSSQL dateadd 函数结果上的“光标类型已更改”错误【英文标题】:"Cursor type changed" error on Perl OLE32 MSSQL dateadd function results 【发布时间】:2013-12-07 01:27:09 【问题描述】:

以下 sql "select DATEADD(day, DATEDIFF(day, 2, GETDATE()), '20:00:00') as A" 在 Microsoft sql 查询中运行良好。

但是在 perl 中,它会报错“描述:[Microsoft][ODBC SQL Server Driver]Cursor type changed”。

我仔细检查了一下,我的代码可以毫无问题地运行 select 和 update 语句,所以我对游标错误感到有些困惑。

请注意,我没有包含我的连接字符串,但说明我使用的是 win32::OLE。

use Win32::OLE;

$conn->ConnectionString = "...";
$conn->open; # open connection to the DB 
$state = $conn ->state; #1 means connected   
if($state  ne "1")...

$mssql_select = "select  DATEADD(day, DATEDIFF(day, 2, GETDATE()), '20:00:00')
as A";
$rs->Open( $mssql_select, $conn);  
my $error_collection = $conn->Errors();
my $ecount = $error_collection->Count;
my ($is_message, $real_error_found);
foreach my $error (in $error_collection)
       
    #output error statements
    $is_message = ($error->SQLState eq "01000" && $error->NativeError==0);
    $real_error_found=1 unless $is_message;
    $status =  "ERROR # " . $error->Number
    . "\n Description: " . $error->Description
    . "\nSource: " . $error->Source . "\n";
 

导致“描述:[Microsoft][ODBC SQL Server Driver]光标类型已更改”。

如果小组可以提供任何头脑风暴的想法,我们将不胜感激。

我想通了,见下文

【问题讨论】:

【参考方案1】:

解决了,原来这只是一个警告,sql server 不知道会返回什么类型的游标,结果实际上是返回的。见http://social.msdn.microsoft.com/Forums/sqlserver/en-US/e15141e7-3084-487d-a60f-47afac046a55/odbcsql-cursor-error

【讨论】:

以上是关于Perl OLE32 MSSQL dateadd 函数结果上的“光标类型已更改”错误的主要内容,如果未能解决你的问题,请参考以下文章

Perl Win32::OLE 生成访问数据库

win32client dispatch在python中失败,而win32 :: ole new在perl中成功运行for com dll

perl tk将界面输入的汉字不能输出到读取的EXCEL表格

Perl 的 OLE 自动化基础知识

(Perl)使用WMI获取系统信息

将参数传递给 OLE DB SOURCE