[Haskell-cafe] hdbc-odbc not getting any data using mssql stored procedure

grant weyburne weyburne
Thu Oct 10 14:08:41 UTC 2013


Hi Gauthier, that answer was perfect! I just tried it out and It completely
solved my problem. Thanks so much! Grant.


On Thu, Oct 10, 2013 at 8:58 AM, Gauthier Segay <gauthier.segay at gmail.com>wrote:

> Hello Grant, pulling this topic out of the archive as I face similar issue
> and found a work around.
>
> I'm unsure what's happening in gp_somestoredproc but if using the sql
> management studio, you see some output such as
>
> (X row(s) affected)
>
> then you might want to put "set nocount on" before issuing the statement
>
> I'm unsure what's the status of multiple resultset in hdbc / hdbc-odbc but
> I did succeed pulling results out of first resultset of a stored procedure
> call
>
> (sorry for html email, sending this from google groups)
>
>
> On Friday, 1 February 2013 01:16:38 UTC+1, grant wrote:
>
>> Hi,
>>
>> I am trying to call a stored procedure (exec gp_somestoredproc 123,22)
>> using microsoft sql server 2008 R2 using hdbc-odbc.
>>
>> Here is the haskell code:
>>
>> import Database.HDBC
>> import Database.HDBC.ODBC
>> import Control.Monad
>> import Data.Maybe
>> import qualified Data.ByteString.Char8 as B
>>
>> test1 = do
>>   c <- connectODBC "Driver={SQL Server};Server=?;Database=?;**uid=sa;pwd=?;"
>>
>>   p <- prepare c "exec gp_somestoredproc 123,22" -- returns no data
>>  --  p <- prepare c "exec [sys].sp_datatype_info_100 0, at ODBCVer=4;exec
>> gp_somestoredproc 123,22" -- all is good
>>   e <- execute p []  -- returns 6 (number of rows)
>>   putStrLn $ "execute " ++ show e
>>   r <- fetchAllRows' p
>>   putStrLn $ "fetchAllRows' " ++ show r
>>
>>
>> The problem is that this code returns the number of rows correctly but
>> doesn't return data nor are there any errors.
>>
>> However, I ran a perl program using perl dbi and got the data correctly.
>>
>> Here is the perl code:
>>
>> #!/usr/bin/perl
>> use DBI;
>>
>>   my $user = 'sa';
>>   my $pw = '????';
>>   my $dsn = '????';
>>   my $dbh = DBI->connect("dbi:ODBC:$dsn", $user, $pw,
>>        {PrintError => 1, RaiseError => 1});
>>   if (!$dbh) {
>>      print "error: connection: $DBI::err\n$DBI::errstr\n$DBI:**:state\n";
>>
>>   }
>>   my $type_info = $dbh->type_info(93);
>>   while(my($key, $value) = each(%$type_info)){
>>      print "$key => $value\n";
>>   };
>>   my $sql = "exec gp_somestoredproc 123,22";
>>   my $sth = $dbh->prepare($sql);
>>   my $r   = $sth->execute;
>>   while (my ($db) = $sth->fetchrow_array) {
>>      print $db . "\n===\n";
>>
>>   }
>>   $dbh->disconnect if $dbh;
>>
>> I traced both versions and noticed that the perl dbi version first called
>>
>>    exec [sys].sp_datatype_info_100 0, at ODBCVer=4
>>
>> So I prefixed the stored proc call in haskell with "exec
>> [sys].sp_datatype_info_100 0, at ODBCVer=4;" and it worked fine.
>>
>> In short:
>>
>> FAILS  p <- prepare c "exec gp_somestoredproc 123,22"  -- returns number
>> of rows
>> but no data
>>
>> WORKS  p <- prepare c "exec [sys].sp_datatype_info_100 0, at ODBCVer=4;exec
>> gp_somestoredproc 123,22"
>>
>> I have no idea why this works.
>>
>> sp_datatype_info_100 just dumps out the fields types ...
>>
>> More information:
>>
>> The stored procedure returns data with user defined field types.
>> I have managed to do selects against tables with user defined field types
>> without any problems using hdbc-odbc.
>> I couldn't emulate this error on a local older version of mssql server
>> (Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64)  express) but the
>> perl dbi
>> prefixed the stored procedure call with  "exec sp_datatype_info
>> 0, at ODBCVer=3"
>> I am running this against Microsoft SQL Server 2008 R2 (RTM) -
>> 10.50.1797.0
>> (X64)
>>
>> I would appreciate any pointers you can give me.
>> Thanks
>> Grant
>>
>>
>>
>> ______________________________**_________________
>> Haskell-Cafe mailing list
>> Haskel... at haskell.org
>> http://www.haskell.org/**mailman/listinfo/haskell-cafe<http://www.haskell.org/mailman/listinfo/haskell-cafe>
>>
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20131010/82268cf5/attachment.htm>



More information about the Haskell-Cafe mailing list