Mike,
I believe using a output parameter is more efficient.
If you do the select scope_identity() technique you are returning an
entire row of data as a DataSet, DataTable, DataReader.. There is
still overhead associated with it (more network traffic, bigger object
to instantiate)
An output parameter is certainly better.
Vince
> Great! That's what I do, but I've seen examples here and there using output
> parameters and wondered why.
[quoted text clipped - 23 lines]
>
> - Show quoted text -
Eliyahu Goldin - 01 Jun 2007 07:08 GMT
??
Why do you think select scope_identity() returns more than just a single
scalar value?

Signature
Eliyahu Goldin,
Software Developer & Consultant
Microsoft MVP [ASP.NET]
http://msmvps.com/blogs/egoldin
> Mike,
> I believe using a output parameter is more efficient.
[quoted text clipped - 34 lines]
> >
> > - Show quoted text -
Göran Andersson - 01 Jun 2007 09:19 GMT
> ??
> Why do you think select scope_identity() returns more than just a single
> scalar value?
Because you are executing a select. It creates a result in the form of
data rows. The result is a single row containing a single field, but
it's still a result in the form of data rows.

Signature
Göran Andersson
_____
http://www.guffa.com
Mike - 01 Jun 2007 07:52 GMT
My understanding of ExecuteScalar is that it returns 1 single value. The
docs say nothing about returning this in a datareader/dataset. In fact, the
docs say that any values other than the first column of the first row are
discarded.
http://msdn2.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.execut
escalar.aspx
But thanks anyway.
Mike
> Mike,
> I believe using a output parameter is more efficient.
[quoted text clipped - 36 lines]
>>
>> - Show quoted text -
Göran Andersson - 01 Jun 2007 09:24 GMT
> My understanding of ExecuteScalar is that it returns 1 single value. The
> docs say nothing about returning this in a datareader/dataset. In fact, the
> docs say that any values other than the first column of the first row are
> discarded.
Yes, the method returns a single value, but the database query returns a
complete result to return that single value.

Signature
Göran Andersson
_____
http://www.guffa.com
Mike - 01 Jun 2007 11:08 GMT
>> My understanding of ExecuteScalar is that it returns 1 single value. The
>> docs say nothing about returning this in a datareader/dataset. In fact,
[quoted text clipped - 3 lines]
> Yes, the method returns a single value, but the database query returns a
> complete result to return that single value.
But it appears to be faster (and there more efficient?) to use ExecuteScalar
http://codebetter.com/blogs/john.papa/archive/2005/04/10/61745.aspx
Mike
Göran Andersson - 02 Jun 2007 11:31 GMT
>>> My understanding of ExecuteScalar is that it returns 1 single value. The
>>> docs say nothing about returning this in a datareader/dataset. In fact,
[quoted text clipped - 8 lines]
>
> Mike
With such a small difference as 3%, I would say that they seem to be
equally fast.
That test doesn't say anything at all about scalability or the use of
resources, though.
I don't have much substantial on this yet, but I would say that a
parameter is likely to use less resources than a data reader. A data
reader is built to handle data of very different sizes, and uses a
buffer of several kB for buffering the data, even if the data that you
actually get is only a few bytes.

Signature
Göran Andersson
_____
http://www.guffa.com