Today a colleague asked me how to export SQL Query Results to a CSV file. This got me thinking that it would be a nice exercise to do this from a C# application.

So to start off, I downloaded the correct AdventureWorks database for my version of SQL from the following CodePlex page.

I attached the database and wrote a short piece of code to execute SQLCMD from C#.

SQL Results CSV File

The SQL command I wanted to execute is as follows:

SELECT BusinessEntityID,AccountNumber,Name,PreferredVendorStatus,ActiveFlag,ModifiedDate FROM AdventureWorks2008R2.Purchasing.Vendor WHERE CreditRating >= 3

The command that needs to execute from C# is thus as follows:


SQLCMD -S DIRK-DELLSQLSERVER -d AdventureWorks2008R2 -U sa -P mypassword -Q "SELECT [BusinessEntityID],[AccountNumber],[Name],[PreferredVendorStatus],[ActiveFlag],[ModifiedDate] FROM AdventureWorks2008R2.Purchasing.Vendor WHERE [CreditRating] >= 3 " -s "," -o "c:tempVendorResults.csv"

The format is as follows:

SQLCMD -S YourSQLServer -d YourDatabase -U YourUserName -P YourPassword -Q “Your Query” -s “,” -o “C:Yourfilename.csv”

Running this from  the command prompt will create a CSV file at the path you specified. So putting this all together, fire up your Visual Studio and create the following method.

private void RunProcess()
{
string FileName = "SQLCMD";
string Arguments = @"-S DIRK-DELLSQLSERVER -d AdventureWorks2008R2 -U sa -P mypassword -Q ""SELECT [BusinessEntityID],[AccountNumber],[Name],[PreferredVendorStatus],[ActiveFlag],[ModifiedDate] FROM AdventureWorks2008R2.Purchasing.Vendor WHERE [CreditRating] >= 3 "" -s "","" -o ""c:tempVendorResults.csv""";

ProcessStartInfo proc = new ProcessStartInfo(FileName, Arguments);
proc.UseShellExecute = false;
proc.CreateNoWindow = true;
proc.WindowStyle = ProcessWindowStyle.Hidden;

Process p = new Process();
p.StartInfo = proc;

p.Start();
p.WaitForExit();
}

Running your application creates the CSV file in the path specified. Opening the file, you can see the results.

CSV File Output from C# SQLCMD

The uses for this are endless, and can extend the functionality of your applications tremendously with a few lines of simple C# code.

Reference: Pinal Dave