Re: ADO.NET, Sql2K5 - true hack...

Peter Osucha <[email protected]> Tue, 24 Apr 2007 10:31:32 -0400
Newsgroups gmane.comp.windows.devel.dotnet.cx
Message-ID <[email protected]>
Hmmmm.  When I started figuring out how to get the data I really wanted
back, the sp was in flux.  I wasn't sure how many datasets would be
returned - hence the loop.  Now that it's fixed, I guess I could do it
as you suggest.  Let me think about it (thanks for the comments)...

-----Original Message-----
From: Discussion relating to the specifics of the C# and Managed C++
languages [mailto:[email protected]] On Behalf Of Ryan Heath
Sent: Tuesday, April 24, 2007 4:14 AM
To: [email protected]
Subject: Re: [DOTNET-CX] ADO.NET, Sql2K5 - true hack...

On 4/23/07, Peter Osucha <[email protected]> wrote:
> This one sp I'm calling actually returns 4 datasets.  So my C# code
> processed the first dataset and then goes into this while (
> dr.NextResult ( ) ) loop. Before the loop, I set a counter variable


From the information you gave, a switch seems to be "overgeneralised"
without any benefit.

Is this your code?

int i = 0;
do
{
 switch(i)
 {
 case 0: // handle 1st data
 case 1: // handle 2nd data
 case 2: // handle 3rd data
 case 3: // handle 4th data
 default: // throw exception (unexpected) ;)
 }
 i++;
} while ( dr.NextResult());


Personally I would prefer

// handle 1st data
if ( !dr.NextResult()) // throw exception
// handle 2nd data
if ( !dr.NextResult()) // throw exception
// handle 3rd data
if ( !dr.NextResult()) // throw exception
// handle 4th data

Since the order is hard coded in your SP, it make sense to hard code
it in your C# code as well, the switch makes it hard to read, IMO

// Ryan


On 4/23/07, Peter Osucha <[email protected]> wrote:
> David,
>
> I fixed the sps this morning - yes, your suggestion was the right one.
> However, I'm still hoping for a bit more.  Perhaps you have another
> suggestion?
>
> This one sp I'm calling actually returns 4 datasets.  So my C# code
> processed the first dataset and then goes into this while (
> dr.NextResult ( ) ) loop. Before the loop, I set a counter variable
> (loopIdx) to '1' - loopIdx gets incremented each time a 'NextResult'
is
> found.  I then use a Switch() block to act on the specific NextResult
> DataSet.  It seems like there should be a better way to check the
> dataset I'm working with then just using this loopIdx arrangement
where
> I, as a developer, need to 'remember' the order of the returned
> DataSets.
>
> Peter
>
>
> -----Original Message-----
> From: Discussion relating to the specifics of the C# and Managed C++
> languages [mailto:[email protected]] On Behalf Of Peter
> Osucha
> Sent: Saturday, April 21, 2007 9:01 PM
> To: [email protected]
> Subject: Re: [DOTNET-CX] ADO.NET, Sql2K5 - true hack...
>
> Yes, David.  Indeed it does.  I didn't even think of that.  That makes
> much
> more sense.
>
> Thanks.
>
> Peter(--;)
>
> -----Original Message-----
> From: Discussion relating to the specifics of the C# and Managed C++
> languages [mailto:[email protected]] On Behalf Of David L.
> Penton
> Sent: Saturday, April 21, 2007 4:38 PM
> To: [email protected]
> Subject: Re: [DOTNET-CX] ADO.NET, Sql2K5 - true hack...
>
> Is there some reason why you can't return an empty resultset in the
> cases
> where there is nothing to return for sets #2 and #3?  That seems like
a
> better thing to do.
>
> &_david++;
>
> Peter Osucha wrote:
> > This seems like a true 'hack'.  Perhaps someone can give me a better
> > way to do this.
> >
> > I have an SQL2K5 sp that returns up to 3 datasets (before telling me
> > to not return more than 1 dataset, please let me know of a better
way
> > to do this! J).  The first dataset is always returned.  Due to the
> > arguments used to call the sp, there is a chance that the normal
> > 'second' dataset won't be returned, the normal 'third' dataset won't
> > be returned, or that neither the normal 'second' nor the normal
> > 'third' dataset will be returned.
> >
> > In order to tell in my C# app which dataset I am working with (I
keep
> > looking for new datasets with a
> >
> > 'while ( dr.NextResult ( ) ) {}'
> >
> > block of code), I am using a 'hack' of adding an extra column to the
> > returned dataset ('FromTabel1' or 'FromTable2', etc.) so that I can
> > check the datareader.GetOrdinal() to see which dataset I am really
> > dealing with.
> >
> > If I have explained well enough what I am doing, can someone please
> > provide me a better way to check a returned dataSet for my purpose?
> >
> > Peter

===================================
This list is hosted by DevelopMentorĀ®  http://www.develop.com

View archives and manage your subscription(s) at http://discuss.develop.com