Skip to content
Advertisement

Does SqlDataAdapter open its own connection?

Does SqlDataAdapter open its own connection?

I’m getting a message back from the database that the table #temptable does not exist.

Does SqlDataAdapter open its own connection? Perhaps this is why it does not see the local temp table?

Advertisement

Answer

If your SqlConnection was already open, then SqlDataAdapter should use it as is (i.e. without closing/opening it).

One possibility as to why your stored procs cannot see the temp table, is that ADO.NET executed your first SqlCommand (used to create the temp table), with a sp_executesql call. That would mean that the temp table gets created within the scope of the stored proc sp_executesql, and would not be visible to subsequent commands, even though you are using the same connection. To check, you could run a Sql Profiler trace – if you see sp_executesql being used for your first SqlCommand, then you’ll have a problem.

This comment at: Sql Server temporary table disappears may be relevant:

I honestly think it has to do with the way the SqlCommand text is structured. If it’s a simple select into, with no parameters, then it may be run as a simple select statement, so it won’t be wrapped in an SqlProcedure like ‘sp_executesql’, so it will remain visible to subsequent queries using that same SqlCommand and SqlConnection object. On the other hand, if it’s a complex statement, the temp table may be created within a stored procedure like ‘sp_executesql’, and will go out of scope by the time the command is finished. – Triynko Feb 25 ’15 at 21:10

If ADO.NET is indeed using sp_executesql for your table creation command, then you might be able to coax it into not using it, by breaking up the command into 2 SqlCommands: one to drop the temp table if it exists, and another to just create the temp table.

EDIT : on a side note, this code:

should probably be:

otherwise OBJECT_ID('#CRM2Oxa_ID_MAPPING') will always be null (unless you are already in the temp database).

EDIT 2 : here’s some simple code which works for me:

The stored proc looks like this:

At the end, it displays : “done, num rows 1”

User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement