views:

170

answers:

1

Hi.

I want to see what my insert statement would look like as if I was wiring up an text-based ADO.NET command. How do I do this?

I have been following the below link:

http://damieng.com/blog/2008/07/30/linq-to-sql-log-to-debug-window-file-memory-or-multiple-writers

And have added the DebugTextWriter class to my project. So, now, in my code I have the following which doesn't really do anything and I don't think its right:

    using(WorkbookDataContext dc = _conn.GetContext())
    {
        if(profile.ProfileId > 0)
        {
            dc.Profiles.Attach(profile, true);
        }
        else
        {
            dc.Profiles.InsertOnSubmit(profile);
        }

        dc.Log = new DebugTextWriter();

        #if DEBUG
            dc.Log = new System.IO.StreamWriter("linq-to-sql.log") 
            { 
                 AutoFlush = true 
            };
        #endif


        dc.SubmitChanges();
    }

Any ideas what I am doing wrong and/or how to inspect my LINQ insert statement correctly?

Thanks

A: 

How to: Display Generated SQL (LINQ to SQL)

You can view the SQL code with the Log property.

Example: use the Log property to display SQL code in the console window before the code is executed. You can use this property with query, insert, update & delete commands.

db.Log = Console.Out;
IQueryable<Customer> custQuery =
    from cust in db.Customers
    where cust.City == "London"
    select cust;

foreach(Customer custObj in custQuery)
{
    Console.WriteLine(custObj.CustomerID);
}

These lines from the console window are what you see when you execute the C# code above.

SELECT [t0].[CustomerID], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactT
itle], [t0].[Address], [t0].[City], [t0].[Region], [t0].[PostalCode], [t0].[Coun
try], [t0].[Phone], [t0].[Fax]
FROM [dbo].[Customers] AS [t0]
WHERE [t0].[City] = @p0
-- @p0: Input String (Size = 6; Prec = 0; Scale = 0) [London]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20810.0

AROUT
BSBEV
CONSH
EASTC
NORTS
SEVES

Alternately, you can use the LINQ to SQL Debug Visualizer to hover over a LINQ expression while in the VS 2008 debugger, and then inspect the raw SQL that the ORM will execute at runtime when evaluating the LINQ query expression.

DOK
Thanks I followed that but I can't seem to get the console window to appear. Must my SubmitChanges statement execute successfully for the console window to show the code? It fails there.
Code Sherpa
Thanks - solved with LINQ to SQL Debug Visualizer. That was pretty much what I was looking for. Thanks again.
Code Sherpa
@Code Sherpa: I'm glad you found your solution. I think the Visualizer is a great tool, well worth downloading since you'll probably be using it often. It doesn't require writing special code that you really don't want to leave around in the code when you deploy.
DOK