<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8419253340539253913</id><updated>2011-11-27T19:38:58.446-05:00</updated><category term='C#'/><category term='LINQ'/><category term='Zip'/><category term='MVC'/><category term='SQL'/><category term='Logs'/><category term='Tyler'/><category term='SSRS'/><category term='OOP'/><category term='Batch'/><category term='osql'/><category term='Extentions'/><category term='Web Service'/><category term='DOS'/><title type='text'>&lt; t i m o r r i s /&gt;</title><subtitle type='html'>...do yourself a favor and go somewhere else...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://timorris.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8419253340539253913/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://timorris.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>timorris</name><uri>http://www.blogger.com/profile/02870313310786211849</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/_y2z0ldyx_fQ/SQsih8vOzII/AAAAAAAAAPY/fezDxZtAVec/s1600-R/surprise.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8419253340539253913.post-6954565037894046084</id><published>2009-02-18T13:42:00.016-05:00</published><updated>2009-02-19T11:21:18.837-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>SQL Generation</title><content type='html'>Recently I wrote a console application that generates SQL code to populate a database with sample data.  I wanted it to be as generic as possible, but it still relies on a Source database to get sample data from.  The application is configurable in that it lets you specify which Database is the source database, as well which tables to get the data out of.  I did not want this application to depend on any stored procedures; it needs to be self contained, which is why I'm hard-coding the table definition sql query.  &lt;br /&gt;&lt;br /&gt;So I call the console app via a batch file.  The batch file calls the exe file, outputting the text to a file:&lt;br /&gt;&lt;div style="overflow-x: auto;"&gt;&lt;div class="codeContainer"&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   01: &lt;/span&gt;&lt;span class="kwrd"&gt;@ECHO&lt;/span&gt; &lt;span class="kwrd"&gt;OFF&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   02: &lt;/span&gt;bin\debug\SqlGenerator.exe &amp;gt; &lt;span class="str"&gt;"C:\run.sql"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   03: &lt;/span&gt;&lt;span class="kwrd"&gt;ECHO&lt;/span&gt; done.&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Here is the main method in the console app:&lt;br /&gt;&lt;div style="overflow-x: auto;"&gt;&lt;div class="codeContainer"&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   01: &lt;/span&gt;&lt;span class="kwrd"&gt;class&lt;/span&gt; Program {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   02: &lt;/span&gt;    &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   03: &lt;/span&gt;         Console.WriteLine(Database.GenerateSQL());&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   04: &lt;/span&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   05: &lt;/span&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Here is the relevant excerpt from the App.config file:&lt;br /&gt;&lt;div style="overflow-x: auto;"&gt;&lt;div class="codeContainer"&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   01: &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;appSettings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   02: &lt;/span&gt;      &lt;span class="rem"&gt;&amp;lt;!-- &lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   03: &lt;/span&gt;&lt;span class="rem"&gt;      GenerateSQL Possible values:&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   04: &lt;/span&gt;&lt;span class="rem"&gt;        SystemData,&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   05: &lt;/span&gt;&lt;span class="rem"&gt;        SampleData&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   06: &lt;/span&gt;&lt;span class="rem"&gt;      --&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   07: &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;key&lt;/span&gt;&lt;span class="kwrd"&gt;="GenerateSQL"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="SystemData,SampleData"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   08: &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;key&lt;/span&gt;&lt;span class="kwrd"&gt;="SystemTables"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="StandardCommands,PaxScript,VersionInfo,Model,&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   09: &lt;/span&gt;          &lt;span class="kwrd"&gt;Parameter,Forms,FormFieldTypes,FormFields,ListDefinition,&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   10: &lt;/span&gt;          &lt;span class="kwrd"&gt;ListColumn,ListType,ListData"&lt;/span&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   11: &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;key&lt;/span&gt;&lt;span class="kwrd"&gt;="SampleTables"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="Patient|WHERE PatientID &amp;amp;lt;= 7564,&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   12: &lt;/span&gt;          &lt;span class="kwrd"&gt;Bridge,Device"&lt;/span&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   13: &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;appSettings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Here is the Enum which the working class relies on:&lt;br /&gt;&lt;div style="overflow-x: auto;"&gt;&lt;div class="codeContainer"&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   01: &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;enum&lt;/span&gt; DB : &lt;span class="kwrd"&gt;int&lt;/span&gt; {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   02: &lt;/span&gt;   SystemData = 0,&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   03: &lt;/span&gt;   SampleData = 1&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   04: &lt;/span&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Here is the entire working class&lt;br /&gt;&lt;i&gt;(Note: this class uses a database utility helper class, called "DBAccess", which is not included here.  This post assumes you have a similar Database utility or framework in place)&lt;/i&gt;...&lt;br /&gt;&lt;div style="overflow-x: auto;"&gt;&lt;div class="codeContainer"&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   01: &lt;/span&gt;&lt;span class="kwrd"&gt;class&lt;/span&gt; Database {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   02: &lt;/span&gt;&amp;#160;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   03: &lt;/span&gt;   &lt;span class="preproc"&gt;#region&lt;/span&gt; Private Properties&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   04: &lt;/span&gt;   &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="cobj"&gt;List&lt;/span&gt;&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; SystemDataTables {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   05: &lt;/span&gt;      &lt;span class="kwrd"&gt;get&lt;/span&gt; {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   06: &lt;/span&gt;         &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="cobj"&gt;List&lt;/span&gt;&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;() {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   07: &lt;/span&gt;                &lt;span class="str"&gt;"StandardCommands"&lt;/span&gt;,&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   08: &lt;/span&gt;                &lt;span class="str"&gt;"PaxScript"&lt;/span&gt;,&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   09: &lt;/span&gt;                &lt;span class="str"&gt;"VersionInfo"&lt;/span&gt;,&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   10: &lt;/span&gt;                &lt;span class="str"&gt;"Model"&lt;/span&gt;,&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   11: &lt;/span&gt;                &lt;span class="str"&gt;"Parameter"&lt;/span&gt;,&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   12: &lt;/span&gt;                &lt;span class="str"&gt;"Forms"&lt;/span&gt;,&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   13: &lt;/span&gt;                &lt;span class="str"&gt;"FormFieldTypes"&lt;/span&gt;,&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   14: &lt;/span&gt;                &lt;span class="str"&gt;"FormFields"&lt;/span&gt;,&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   15: &lt;/span&gt;                &lt;span class="str"&gt;"ListDefinition"&lt;/span&gt;,&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   16: &lt;/span&gt;                &lt;span class="str"&gt;"ListColumn"&lt;/span&gt;,&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   17: &lt;/span&gt;                &lt;span class="str"&gt;"ListType"&lt;/span&gt;,&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   18: &lt;/span&gt;                &lt;span class="str"&gt;"ListData"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   19: &lt;/span&gt;            };&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   20: &lt;/span&gt;      }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   21: &lt;/span&gt;   }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   22: &lt;/span&gt;   &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="cobj"&gt;List&lt;/span&gt;&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; SampleDataTables {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   23: &lt;/span&gt;      &lt;span class="kwrd"&gt;get&lt;/span&gt; {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   24: &lt;/span&gt;         &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="cobj"&gt;List&lt;/span&gt;&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;() {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   25: &lt;/span&gt;                &lt;span class="str"&gt;"Patient"&lt;/span&gt;,&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   26: &lt;/span&gt;                &lt;span class="str"&gt;"Bridge"&lt;/span&gt;,&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   27: &lt;/span&gt;                &lt;span class="str"&gt;"Device"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   28: &lt;/span&gt;            };&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   29: &lt;/span&gt;      }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   30: &lt;/span&gt;   }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   31: &lt;/span&gt;   &lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   32: &lt;/span&gt;&amp;#160;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   33: &lt;/span&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GenerateSQL() {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   34: &lt;/span&gt;      &lt;span class="cobj"&gt;StringBuilder&lt;/span&gt; sb = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="cobj"&gt;StringBuilder&lt;/span&gt;();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   35: &lt;/span&gt;      &lt;span class="kwrd"&gt;if&lt;/span&gt; (ConfigurationManager.AppSettings[&lt;span class="str"&gt;"GenerateSQL"&lt;/span&gt;] != &lt;span class="kwrd"&gt;null&lt;/span&gt;) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   36: &lt;/span&gt;         &lt;span class="cobj"&gt;List&lt;/span&gt;&amp;lt;DB&amp;gt; list = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="cobj"&gt;List&lt;/span&gt;&amp;lt;DB&amp;gt;();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   37: &lt;/span&gt;         &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; s &lt;span class="kwrd"&gt;in&lt;/span&gt; ConfigurationManager&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   38: &lt;/span&gt;             .AppSettings[&lt;span class="str"&gt;"GenerateSQL"&lt;/span&gt;].Split(&lt;span class="str"&gt;','&lt;/span&gt;)) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   39: &lt;/span&gt;            list.Add((DB)&lt;span class="cobj"&gt;Enum&lt;/span&gt;.Parse(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(DB), s));&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   40: &lt;/span&gt;         }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   41: &lt;/span&gt;         sb.Append(GenerateSQL(list));&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   42: &lt;/span&gt;      } &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   43: &lt;/span&gt;         sb.Append(Database.GenerateSQL(&lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="cobj"&gt;List&lt;/span&gt;&amp;lt;DB&amp;gt; { &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   44: &lt;/span&gt;                DB.SystemData, DB.SampleData }));&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   45: &lt;/span&gt;      &lt;span class="kwrd"&gt;return&lt;/span&gt; sb.ToString();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   46: &lt;/span&gt;   }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   47: &lt;/span&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GenerateSQL(&lt;span class="cobj"&gt;List&lt;/span&gt;&amp;lt;DB&amp;gt; list) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   48: &lt;/span&gt;      &lt;span class="cobj"&gt;StringBuilder&lt;/span&gt; sb = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="cobj"&gt;StringBuilder&lt;/span&gt;();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   49: &lt;/span&gt;&amp;#160;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   50: &lt;/span&gt;      &lt;span class="rem"&gt;// Order them by precedence&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   51: &lt;/span&gt;      &lt;span class="rem"&gt;// (in-case the App.config has the values out of order)...&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   52: &lt;/span&gt;      &lt;span class="linqkwrd"&gt;var&lt;/span&gt; e = &lt;span class="linqkwrd"&gt;from&lt;/span&gt; o &lt;span class="kwrd"&gt;in&lt;/span&gt; list&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   53: &lt;/span&gt;              &lt;span class="linqkwrd"&gt;orderby&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt;)o&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   54: &lt;/span&gt;              &lt;span class="linqkwrd"&gt;select&lt;/span&gt; o;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   55: &lt;/span&gt;&amp;#160;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   56: &lt;/span&gt;      &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="linqkwrd"&gt;var&lt;/span&gt; d &lt;span class="kwrd"&gt;in&lt;/span&gt; e) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   57: &lt;/span&gt;         &lt;span class="kwrd"&gt;switch&lt;/span&gt; (d) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   58: &lt;/span&gt;            &lt;span class="kwrd"&gt;case&lt;/span&gt; DB.SystemData:&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   59: &lt;/span&gt;               sb.Append(SystemData());&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   60: &lt;/span&gt;               &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   61: &lt;/span&gt;            &lt;span class="kwrd"&gt;case&lt;/span&gt; DB.SampleData:&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   62: &lt;/span&gt;               sb.Append(SampleData());&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   63: &lt;/span&gt;               &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   64: &lt;/span&gt;         }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   65: &lt;/span&gt;      }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   66: &lt;/span&gt;      &lt;span class="kwrd"&gt;return&lt;/span&gt; sb.ToString();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   67: &lt;/span&gt;   }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   68: &lt;/span&gt;&amp;#160;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   69: &lt;/span&gt;   &lt;span class="preproc"&gt;#region&lt;/span&gt; [ System Data ]&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   70: &lt;/span&gt;   &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; SystemData() {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   71: &lt;/span&gt;      &lt;span class="cobj"&gt;StringBuilder&lt;/span&gt; sb = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="cobj"&gt;StringBuilder&lt;/span&gt;();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   72: &lt;/span&gt;      &lt;span class="kwrd"&gt;if&lt;/span&gt; (ConfigurationManager.AppSettings[&lt;span class="str"&gt;"SystemTables"&lt;/span&gt;] != &lt;span class="kwrd"&gt;null&lt;/span&gt;) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   73: &lt;/span&gt;         &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; s &lt;span class="kwrd"&gt;in&lt;/span&gt; ConfigurationManager&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   74: &lt;/span&gt;             .AppSettings[&lt;span class="str"&gt;"SystemTables"&lt;/span&gt;].Split(&lt;span class="str"&gt;','&lt;/span&gt;)) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   75: &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (s.&lt;span class="linqkwrd"&gt;Contains&lt;/span&gt;(&lt;span class="str"&gt;"|"&lt;/span&gt;)) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   76: &lt;/span&gt;               &lt;span class="kwrd"&gt;string&lt;/span&gt;[] parms = s.Split(&lt;span class="str"&gt;'|'&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   77: &lt;/span&gt;               sb.Append(GenerateSqlFromTable(parms[0], parms[1]));&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   78: &lt;/span&gt;            } &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   79: &lt;/span&gt;               sb.Append(GenerateSqlFromTable(s));&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   80: &lt;/span&gt;         }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   81: &lt;/span&gt;      } &lt;span class="kwrd"&gt;else&lt;/span&gt; {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   82: &lt;/span&gt;         &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; s &lt;span class="kwrd"&gt;in&lt;/span&gt; SystemDataTables) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   83: &lt;/span&gt;            sb.Append(GenerateSqlFromTable(s));&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   84: &lt;/span&gt;         }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   85: &lt;/span&gt;      }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   86: &lt;/span&gt;      &lt;span class="kwrd"&gt;return&lt;/span&gt; sb.ToString();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   87: &lt;/span&gt;   }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   88: &lt;/span&gt;   &lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   89: &lt;/span&gt;&amp;#160;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   90: &lt;/span&gt;   &lt;span class="preproc"&gt;#region&lt;/span&gt; [ Sample Data ]&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   91: &lt;/span&gt;   &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; SampleData() {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   92: &lt;/span&gt;      &lt;span class="cobj"&gt;StringBuilder&lt;/span&gt; sb = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="cobj"&gt;StringBuilder&lt;/span&gt;();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   93: &lt;/span&gt;      &lt;span class="kwrd"&gt;if&lt;/span&gt; (ConfigurationManager.AppSettings[&lt;span class="str"&gt;"SampleTables"&lt;/span&gt;] != &lt;span class="kwrd"&gt;null&lt;/span&gt;) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   94: &lt;/span&gt;         &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; s &lt;span class="kwrd"&gt;in&lt;/span&gt; ConfigurationManager&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   95: &lt;/span&gt;             .AppSettings[&lt;span class="str"&gt;"SampleTables"&lt;/span&gt;].Split(&lt;span class="str"&gt;','&lt;/span&gt;)) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   96: &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (s.&lt;span class="linqkwrd"&gt;Contains&lt;/span&gt;(&lt;span class="str"&gt;"|"&lt;/span&gt;)) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   97: &lt;/span&gt;               &lt;span class="kwrd"&gt;string&lt;/span&gt;[] parms = s.Split(&lt;span class="str"&gt;'|'&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   98: &lt;/span&gt;               sb.Append(GenerateSqlFromTable(parms[0], parms[1]));&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   99: &lt;/span&gt;            } &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  100: &lt;/span&gt;               sb.Append(GenerateSqlFromTable(s));&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  101: &lt;/span&gt;         }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  102: &lt;/span&gt;      } &lt;span class="kwrd"&gt;else&lt;/span&gt; {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  103: &lt;/span&gt;         &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; s &lt;span class="kwrd"&gt;in&lt;/span&gt; SampleDataTables) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  104: &lt;/span&gt;            sb.Append(GenerateSqlFromTable(s));&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  105: &lt;/span&gt;         }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  106: &lt;/span&gt;      }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  107: &lt;/span&gt;      &lt;span class="kwrd"&gt;return&lt;/span&gt; sb.ToString();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  108: &lt;/span&gt;   }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  109: &lt;/span&gt;   &lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  110: &lt;/span&gt;&amp;#160;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  111: &lt;/span&gt;   &lt;span class="preproc"&gt;#region&lt;/span&gt; GenerateSqlFromTable overloads&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  112: &lt;/span&gt;   &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GenerateSqlFromTable(&lt;span class="kwrd"&gt;string&lt;/span&gt; tableName) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  113: &lt;/span&gt;      &lt;span class="kwrd"&gt;return&lt;/span&gt; GenerateSqlFromTable(tableName, &lt;span class="kwrd"&gt;null&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  114: &lt;/span&gt;   }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  115: &lt;/span&gt;&amp;#160;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  116: &lt;/span&gt;   &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GenerateSqlFromTable(&lt;span class="kwrd"&gt;string&lt;/span&gt; tableName, &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  117: &lt;/span&gt;      &lt;span class="kwrd"&gt;string&lt;/span&gt; condition) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  118: &lt;/span&gt;      &lt;span class="cobj"&gt;StringBuilder&lt;/span&gt; sb = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="cobj"&gt;StringBuilder&lt;/span&gt;();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  119: &lt;/span&gt;      &lt;span class="cobj"&gt;List&lt;/span&gt;&amp;lt;GenericTable&amp;gt; genTable = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="cobj"&gt;List&lt;/span&gt;&amp;lt;GenericTable&amp;gt;();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  120: &lt;/span&gt;      &lt;span class="cobj"&gt;DataSet&lt;/span&gt; ds = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="cobj"&gt;DataSet&lt;/span&gt;();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  121: &lt;/span&gt;&amp;#160;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  122: &lt;/span&gt;      &lt;span class="rem"&gt;// Store the Table definition in a List...&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  123: &lt;/span&gt;      &lt;span class="kwrd"&gt;using&lt;/span&gt; (&lt;span class="cobj"&gt;SqlDataReader&lt;/span&gt; rdr = DBAccess&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  124: &lt;/span&gt;          .executeQuery(ColumnDefinitions(tableName))) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  125: &lt;/span&gt;         &lt;span class="kwrd"&gt;if&lt;/span&gt; (rdr.HasRows) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  126: &lt;/span&gt;            &lt;span class="kwrd"&gt;while&lt;/span&gt; (rdr.Read()) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  127: &lt;/span&gt;               genTable.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; GenericTable {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  128: &lt;/span&gt;                  Column = DBAccess.ToStringValue(rdr[&lt;span class="str"&gt;"Column"&lt;/span&gt;]),&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  129: &lt;/span&gt;                  &lt;span class="cobj"&gt;Type&lt;/span&gt; = DBAccess.ToStringValue(rdr[&lt;span class="str"&gt;"Type"&lt;/span&gt;]),&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  130: &lt;/span&gt;                  Width = DBAccess.ToInt16(rdr[&lt;span class="str"&gt;"Width"&lt;/span&gt;]),&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  131: &lt;/span&gt;                  IsNullable = DBAccess.ToBool(rdr[&lt;span class="str"&gt;"IsNullable"&lt;/span&gt;]),&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  132: &lt;/span&gt;                  DefaultValue = DBAccess.ToStringValue(rdr[&lt;span class="str"&gt;"DefaultValue"&lt;/span&gt;]),&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  133: &lt;/span&gt;                  Length = DBAccess.ToInt16(rdr[&lt;span class="str"&gt;"Length"&lt;/span&gt;]),&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  134: &lt;/span&gt;                  PrimaryKey = DBAccess.ToInt16(rdr[&lt;span class="str"&gt;"PrimaryKey"&lt;/span&gt;]),&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  135: &lt;/span&gt;                  Identity = DBAccess.ToBool(rdr[&lt;span class="str"&gt;"Identity"&lt;/span&gt;])&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  136: &lt;/span&gt;               });&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  137: &lt;/span&gt;            }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  138: &lt;/span&gt;         }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  139: &lt;/span&gt;      }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  140: &lt;/span&gt;      &lt;span class="linqkwrd"&gt;var&lt;/span&gt; identityExists = (&lt;span class="linqkwrd"&gt;from&lt;/span&gt; cols &lt;span class="kwrd"&gt;in&lt;/span&gt; genTable&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  141: &lt;/span&gt;                            &lt;span class="kwrd"&gt;where&lt;/span&gt; cols.Identity == &lt;span class="kwrd"&gt;true&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  142: &lt;/span&gt;                            &lt;span class="linqkwrd"&gt;select&lt;/span&gt; cols).&lt;span class="linqkwrd"&gt;Any&lt;/span&gt;();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  143: &lt;/span&gt;&amp;#160;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  144: &lt;/span&gt;      &lt;span class="rem"&gt;// Create the Select statement for the Source Database Table...&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  145: &lt;/span&gt;      &lt;span class="kwrd"&gt;string&lt;/span&gt; sql = &lt;span class="str"&gt;"select "&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  146: &lt;/span&gt;      &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="linqkwrd"&gt;var&lt;/span&gt; t &lt;span class="kwrd"&gt;in&lt;/span&gt; genTable) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  147: &lt;/span&gt;         sql += &lt;span class="cobj"&gt;String&lt;/span&gt;.Format(&lt;span class="str"&gt;"[{0}]{1}"&lt;/span&gt;,&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  148: &lt;/span&gt;             t.Column, (t == genTable.&lt;span class="linqkwrd"&gt;Last&lt;/span&gt;() ? &lt;span class="str"&gt;""&lt;/span&gt; : &lt;span class="str"&gt;", "&lt;/span&gt;));&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  149: &lt;/span&gt;      }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  150: &lt;/span&gt;      sql += &lt;span class="cobj"&gt;String&lt;/span&gt;.Format(&lt;span class="str"&gt;" from {0} {1}"&lt;/span&gt;, tableName, condition ?? &lt;span class="str"&gt;""&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  151: &lt;/span&gt;      &lt;span class="linqkwrd"&gt;var&lt;/span&gt; s = genTable&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  152: &lt;/span&gt;          .&lt;span class="linqkwrd"&gt;Where&lt;/span&gt;(o =&amp;gt; o.PrimaryKey == 1)&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  153: &lt;/span&gt;          .&lt;span class="linqkwrd"&gt;Select&lt;/span&gt;(o =&amp;gt; o.Column).&lt;span class="linqkwrd"&gt;First&lt;/span&gt;();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  154: &lt;/span&gt;      &lt;span class="kwrd"&gt;if&lt;/span&gt; (!&lt;span class="cobj"&gt;String&lt;/span&gt;.IsNullOrEmpty(s))&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  155: &lt;/span&gt;         sql += &lt;span class="cobj"&gt;String&lt;/span&gt;.Format(&lt;span class="str"&gt;" order by {0}"&lt;/span&gt;, s);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  156: &lt;/span&gt;&amp;#160;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  157: &lt;/span&gt;      &lt;span class="rem"&gt;// Convert DataReader to Dataset in order to &lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  158: &lt;/span&gt;      &lt;span class="rem"&gt;// detect when you're on the last record.&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  159: &lt;/span&gt;      &lt;span class="kwrd"&gt;using&lt;/span&gt; (&lt;span class="cobj"&gt;SqlDataReader&lt;/span&gt; reader = DBAccess.executeQuery(sql)) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  160: &lt;/span&gt;         ds = ConvertDataReaderToDataSet(reader);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  161: &lt;/span&gt;      }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  162: &lt;/span&gt;&amp;#160;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  163: &lt;/span&gt;      &lt;span class="rem"&gt;// Right now it's really just 1 table, but that could change.&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  164: &lt;/span&gt;      &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="cobj"&gt;DataTable&lt;/span&gt; dt &lt;span class="kwrd"&gt;in&lt;/span&gt; ds.Tables) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  165: &lt;/span&gt;         &lt;span class="cobj"&gt;List&lt;/span&gt;&amp;lt;&lt;span class="cobj"&gt;DataRow&lt;/span&gt;&amp;gt; rows = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="cobj"&gt;List&lt;/span&gt;&amp;lt;&lt;span class="cobj"&gt;DataRow&lt;/span&gt;&amp;gt;();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  166: &lt;/span&gt;         &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; x = 0; x &amp;lt; dt.Rows.&lt;span class="linqkwrd"&gt;Count&lt;/span&gt;; x++) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  167: &lt;/span&gt;            rows.Add(dt.Rows[x]);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  168: &lt;/span&gt;         }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  169: &lt;/span&gt;&amp;#160;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  170: &lt;/span&gt;         &lt;span class="kwrd"&gt;if&lt;/span&gt; (rows.&lt;span class="linqkwrd"&gt;Count&lt;/span&gt; &amp;gt; 0) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  171: &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (identityExists) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  172: &lt;/span&gt;               sb.AppendFormat(&lt;span class="str"&gt;"SET IDENTITY_INSERT [dbo].[{0}] ON\n"&lt;/span&gt;,&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  173: &lt;/span&gt;                   tableName);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  174: &lt;/span&gt;            }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  175: &lt;/span&gt;            &lt;span class="rem"&gt;// Get number of 100 record increments &lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  176: &lt;/span&gt;            &lt;span class="rem"&gt;// and add them to a List of List&amp;lt;DataRow&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  177: &lt;/span&gt;            &lt;span class="kwrd"&gt;int&lt;/span&gt; chunks = &lt;span class="cobj"&gt;Convert&lt;/span&gt;.ToInt32(&lt;span class="cobj"&gt;Math&lt;/span&gt;.Ceiling(rows.&lt;span class="linqkwrd"&gt;Count&lt;/span&gt;() / 100.0));&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  178: &lt;/span&gt;            &lt;span class="cobj"&gt;List&lt;/span&gt;&amp;lt;&lt;span class="cinterface"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span class="cobj"&gt;DataRow&lt;/span&gt;&amp;gt;&amp;gt; rowsList =&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  179: &lt;/span&gt;                &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="cobj"&gt;List&lt;/span&gt;&amp;lt;&lt;span class="cinterface"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span class="cobj"&gt;DataRow&lt;/span&gt;&amp;gt;&amp;gt;();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  180: &lt;/span&gt;            &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; c = 0; c &amp;lt; chunks; c++) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  181: &lt;/span&gt;               &lt;span class="linqkwrd"&gt;var&lt;/span&gt; r = (&lt;span class="linqkwrd"&gt;from&lt;/span&gt; row &lt;span class="kwrd"&gt;in&lt;/span&gt; rows&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  182: &lt;/span&gt;                        &lt;span class="linqkwrd"&gt;select&lt;/span&gt; row).&lt;span class="linqkwrd"&gt;Skip&lt;/span&gt;(c * 100).&lt;span class="linqkwrd"&gt;Take&lt;/span&gt;(100);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  183: &lt;/span&gt;               rowsList.Add(r);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  184: &lt;/span&gt;            }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  185: &lt;/span&gt;&amp;#160;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  186: &lt;/span&gt;            &lt;span class="rem"&gt;// Enumerate through each 100 record increment...&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  187: &lt;/span&gt;            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="linqkwrd"&gt;var&lt;/span&gt; list &lt;span class="kwrd"&gt;in&lt;/span&gt; rowsList) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  188: &lt;/span&gt;               sb.AppendFormat(&lt;span class="str"&gt;@"INSERT [dbo].[{0}] ("&lt;/span&gt;, tableName);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  189: &lt;/span&gt;               &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="linqkwrd"&gt;var&lt;/span&gt; t &lt;span class="kwrd"&gt;in&lt;/span&gt; genTable) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  190: &lt;/span&gt;                  sb.AppendFormat(&lt;span class="str"&gt;@"[{0}]{1}"&lt;/span&gt;, t.Column,&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  191: &lt;/span&gt;                      (t == genTable.&lt;span class="linqkwrd"&gt;Last&lt;/span&gt;() ? &lt;span class="str"&gt;""&lt;/span&gt; : &lt;span class="str"&gt;", "&lt;/span&gt;));&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  192: &lt;/span&gt;               }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  193: &lt;/span&gt;               sb.Append(&lt;span class="str"&gt;")\n"&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  194: &lt;/span&gt;&amp;#160;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  195: &lt;/span&gt;               &lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  196: &lt;/span&gt;               &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="linqkwrd"&gt;var&lt;/span&gt; dr &lt;span class="kwrd"&gt;in&lt;/span&gt; list) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  197: &lt;/span&gt;                  sb.Append(&lt;span class="str"&gt;@"select "&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  198: &lt;/span&gt;                  &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="linqkwrd"&gt;var&lt;/span&gt; t &lt;span class="kwrd"&gt;in&lt;/span&gt; genTable) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  199: &lt;/span&gt;                     &lt;span class="kwrd"&gt;switch&lt;/span&gt; (t.&lt;span class="cobj"&gt;Type&lt;/span&gt;.ToLower()) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  200: &lt;/span&gt;                        &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;"varchar"&lt;/span&gt;:&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  201: &lt;/span&gt;                        &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;"nvarchar"&lt;/span&gt;:&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  202: &lt;/span&gt;                        &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;"char"&lt;/span&gt;:&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  203: &lt;/span&gt;                        &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;"nchar"&lt;/span&gt;:&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  204: &lt;/span&gt;                        &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;"text"&lt;/span&gt;:&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  205: &lt;/span&gt;                        &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;"ntext"&lt;/span&gt;:&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  206: &lt;/span&gt;                        &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;"datetime"&lt;/span&gt;:&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  207: &lt;/span&gt;                        &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;"smalldatetime"&lt;/span&gt;:&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  208: &lt;/span&gt;                        &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;"uniqueidentifier"&lt;/span&gt;:&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  209: &lt;/span&gt;                           &lt;span class="kwrd"&gt;if&lt;/span&gt; (t.IsNullable) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  210: &lt;/span&gt;                              &lt;span class="kwrd"&gt;if&lt;/span&gt; (dr[t.Column] == &lt;span class="cobj"&gt;DBNull&lt;/span&gt;.Value) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  211: &lt;/span&gt;                                 &lt;span class="kwrd"&gt;if&lt;/span&gt; (!&lt;span class="cobj"&gt;String&lt;/span&gt;.IsNullOrEmpty(t.DefaultValue))&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  212: &lt;/span&gt;                                    sb.AppendFormat(&lt;span class="str"&gt;@"N'{0}'"&lt;/span&gt;, t.DefaultValue);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  213: &lt;/span&gt;                                 &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  214: &lt;/span&gt;                                    sb.Append(&lt;span class="str"&gt;"NULL"&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  215: &lt;/span&gt;                              } &lt;span class="kwrd"&gt;else&lt;/span&gt; {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  216: &lt;/span&gt;                                 sb.AppendFormat(&lt;span class="str"&gt;@"N'{0}'"&lt;/span&gt;,&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  217: &lt;/span&gt;                                     DBAccess.ToStringValue(dr[t.Column])&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  218: &lt;/span&gt;                                         .Replace(&lt;span class="str"&gt;"'"&lt;/span&gt;, &lt;span class="str"&gt;"''"&lt;/span&gt;));&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  219: &lt;/span&gt;                              }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  220: &lt;/span&gt;                           } &lt;span class="kwrd"&gt;else&lt;/span&gt; {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  221: &lt;/span&gt;                              sb.AppendFormat(&lt;span class="str"&gt;@"N'{0}'"&lt;/span&gt;,&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  222: &lt;/span&gt;                                  DBAccess.ToStringValue(dr[t.Column])&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  223: &lt;/span&gt;                                      .Replace(&lt;span class="str"&gt;"'"&lt;/span&gt;, &lt;span class="str"&gt;"''"&lt;/span&gt;));&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  224: &lt;/span&gt;                           }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  225: &lt;/span&gt;                           &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  226: &lt;/span&gt;                        &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;"image"&lt;/span&gt;:  &lt;span class="rem"&gt;// Cannot Convert IMAGE to String&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  227: &lt;/span&gt;                           sb.Append(&lt;span class="str"&gt;"NULL"&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  228: &lt;/span&gt;                           &lt;span class="kwrd"&gt;if&lt;/span&gt; (dr[t.Column] != &lt;span class="cobj"&gt;DBNull&lt;/span&gt;.Value) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  229: &lt;/span&gt;                              MessageBox.Show(&lt;span class="cobj"&gt;String&lt;/span&gt;.Format(&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  230: &lt;/span&gt;                                  &lt;span class="str"&gt;"{0}.[{1}] has a valid value for an "&lt;/span&gt; +&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  231: &lt;/span&gt;                                      &lt;span class="str"&gt;"Image data type in Source Database!"&lt;/span&gt;,&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  232: &lt;/span&gt;                                  tableName, t.Column));&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  233: &lt;/span&gt;                           }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  234: &lt;/span&gt;                           &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  235: &lt;/span&gt;                        &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;"bit"&lt;/span&gt;:&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  236: &lt;/span&gt;                           sb.AppendFormat(&lt;span class="str"&gt;@"{0}"&lt;/span&gt;,&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  237: &lt;/span&gt;                               ((t.IsNullable) ?&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  238: &lt;/span&gt;                                   (dr[t.Column] == &lt;span class="cobj"&gt;DBNull&lt;/span&gt;.Value) ?&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  239: &lt;/span&gt;                                   ((!&lt;span class="cobj"&gt;String&lt;/span&gt;.IsNullOrEmpty(t.DefaultValue)) ?&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  240: &lt;/span&gt;                                       t.DefaultValue : &lt;span class="str"&gt;"NULL"&lt;/span&gt;) :&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  241: &lt;/span&gt;                                   DBAccess.ToStringValue(DBAccess&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  242: &lt;/span&gt;                                       .ToInt16(dr[t.Column]))&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  243: &lt;/span&gt;                               : DBAccess.ToStringValue(DBAccess&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  244: &lt;/span&gt;                                       .ToInt16(dr[t.Column]))&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  245: &lt;/span&gt;                           ));&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  246: &lt;/span&gt;                           &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  247: &lt;/span&gt;                        &lt;span class="kwrd"&gt;default&lt;/span&gt;:&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  248: &lt;/span&gt;                           sb.AppendFormat(&lt;span class="str"&gt;@"{0}"&lt;/span&gt;,&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  249: &lt;/span&gt;                               ((t.IsNullable) ?&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  250: &lt;/span&gt;                                   (dr[t.Column] == &lt;span class="cobj"&gt;DBNull&lt;/span&gt;.Value) ?&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  251: &lt;/span&gt;                                   ((!&lt;span class="cobj"&gt;String&lt;/span&gt;.IsNullOrEmpty(t.DefaultValue)) ?&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  252: &lt;/span&gt;                                       t.DefaultValue : &lt;span class="str"&gt;"NULL"&lt;/span&gt;) :&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  253: &lt;/span&gt;                                   DBAccess.ToStringValue(dr[t.Column])&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  254: &lt;/span&gt;                               : DBAccess.ToStringValue(dr[t.Column])&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  255: &lt;/span&gt;                           ));&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  256: &lt;/span&gt;                           &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  257: &lt;/span&gt;                     }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  258: &lt;/span&gt;                     sb.Append((t == genTable.&lt;span class="linqkwrd"&gt;Last&lt;/span&gt;()) ? &lt;span class="str"&gt;""&lt;/span&gt; : &lt;span class="str"&gt;", "&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  259: &lt;/span&gt;                  }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  260: &lt;/span&gt;                  sb.Append((++i &amp;lt; list.&lt;span class="linqkwrd"&gt;Count&lt;/span&gt;()) ? &lt;span class="str"&gt;" union all\n"&lt;/span&gt; : &lt;span class="str"&gt;"\n\n"&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  261: &lt;/span&gt;               }  &lt;span class="rem"&gt;/* finished with IEnumerable&amp;lt;DataRow&amp;gt; */&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  262: &lt;/span&gt;            }  &lt;span class="rem"&gt;/* finished with List&amp;lt;IEnumerable&amp;lt;DataRow&amp;gt;&amp;gt; */&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  263: &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (identityExists) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  264: &lt;/span&gt;               sb.AppendFormat(&lt;span class="str"&gt;"SET IDENTITY_INSERT [dbo].[{0}] OFF\n\n"&lt;/span&gt;,&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  265: &lt;/span&gt;                   tableName);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  266: &lt;/span&gt;            }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  267: &lt;/span&gt;         }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  268: &lt;/span&gt;      } &lt;span class="rem"&gt;/* finished with DataTable */&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  269: &lt;/span&gt;      &lt;span class="kwrd"&gt;return&lt;/span&gt; sb.ToString();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  270: &lt;/span&gt;   }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  271: &lt;/span&gt;   &lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  272: &lt;/span&gt;&amp;#160;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  273: &lt;/span&gt;   &lt;span class="preproc"&gt;#region&lt;/span&gt; Helper Methods&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  274: &lt;/span&gt;   &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ColumnDefinitions(&lt;span class="kwrd"&gt;string&lt;/span&gt; TableName) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  275: &lt;/span&gt;      &lt;span class="kwrd"&gt;string&lt;/span&gt; ret = &lt;span class="cobj"&gt;String&lt;/span&gt;.Format(&lt;span class="str"&gt;@"&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  276: &lt;/span&gt;&lt;span class="str"&gt;select&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  277: &lt;/span&gt;&lt;span class="str"&gt;    sc.[name] as 'Column',&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  278: &lt;/span&gt;&lt;span class="str"&gt;    syt.[name] as 'Type',&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  279: &lt;/span&gt;&lt;span class="str"&gt;    sc.prec as 'Width',&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  280: &lt;/span&gt;&lt;span class="str"&gt;    sc.IsNullable,&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  281: &lt;/span&gt;&lt;span class="str"&gt;    dc.[definition] as 'DefaultValue',&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  282: &lt;/span&gt;&lt;span class="str"&gt;    sc.[Length],&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  283: &lt;/span&gt;&lt;span class="str"&gt;    case when&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  284: &lt;/span&gt;&lt;span class="str"&gt;        sc.[name] in (&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  285: &lt;/span&gt;&lt;span class="str"&gt;            select sc2.[name]&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  286: &lt;/span&gt;&lt;span class="str"&gt;            from sys.columns sc2&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  287: &lt;/span&gt;&lt;span class="str"&gt;            inner join sys.tables st on sc2.object_id = st.object_id&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  288: &lt;/span&gt;&lt;span class="str"&gt;            inner join sys.indexes si on sc2.object_id = si.object_id&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  289: &lt;/span&gt;&lt;span class="str"&gt;            inner join sys.index_columns sic&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  290: &lt;/span&gt;&lt;span class="str"&gt;               on st.object_id = sic.object_id&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  291: &lt;/span&gt;&lt;span class="str"&gt;               and si.index_id = sic.index_id&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  292: &lt;/span&gt;&lt;span class="str"&gt;               and sc2.column_id = sic.column_id&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  293: &lt;/span&gt;&lt;span class="str"&gt;            where st.[name] = '{0}'&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  294: &lt;/span&gt;&lt;span class="str"&gt;              and is_primary_key = '1') then 1&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  295: &lt;/span&gt;&lt;span class="str"&gt;    else 0&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  296: &lt;/span&gt;&lt;span class="str"&gt;    end as 'PrimaryKey',&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  297: &lt;/span&gt;&lt;span class="str"&gt;    case when&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  298: &lt;/span&gt;&lt;span class="str"&gt;        sc.[name] in (&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  299: &lt;/span&gt;&lt;span class="str"&gt;            select sc3.[name]&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  300: &lt;/span&gt;&lt;span class="str"&gt;            from sys.columns sc3&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  301: &lt;/span&gt;&lt;span class="str"&gt;            inner join sys.objects so&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  302: &lt;/span&gt;&lt;span class="str"&gt;               on sc3.object_id = so.object_id&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  303: &lt;/span&gt;&lt;span class="str"&gt;            where so.[name] = '{0}'&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  304: &lt;/span&gt;&lt;span class="str"&gt;              and so.[type] = 'U'&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  305: &lt;/span&gt;&lt;span class="str"&gt;              and sc3.[is_identity] = 1) then 1&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  306: &lt;/span&gt;&lt;span class="str"&gt;    else 0 end as 'Identity'&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  307: &lt;/span&gt;&lt;span class="str"&gt;from syscolumns sc&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  308: &lt;/span&gt;&lt;span class="str"&gt;inner join systypes syt&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  309: &lt;/span&gt;&lt;span class="str"&gt;    on sc.xusertype = syt.xusertype&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  310: &lt;/span&gt;&lt;span class="str"&gt;    and sc.xtype = syt.xtype&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  311: &lt;/span&gt;&lt;span class="str"&gt;left join sys.default_constraints dc&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  312: &lt;/span&gt;&lt;span class="str"&gt;    on sc.cdefault = dc.object_id&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  313: &lt;/span&gt;&lt;span class="str"&gt;where sc.id = OBJECT_ID('{0}')&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  314: &lt;/span&gt;&lt;span class="str"&gt;and syt.[name] &amp;lt;&amp;gt; 'sysname'"&lt;/span&gt;&lt;/span&gt;, TableName);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  315: &lt;/span&gt;      &lt;span class="kwrd"&gt;return&lt;/span&gt; ret;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  316: &lt;/span&gt;   }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  317: &lt;/span&gt;&amp;#160;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  318: &lt;/span&gt;   &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="cobj"&gt;DataSet&lt;/span&gt; ConvertDataReaderToDataSet(&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  319: &lt;/span&gt;       &lt;span class="cobj"&gt;SqlDataReader&lt;/span&gt; reader) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  320: &lt;/span&gt;      &lt;span class="cobj"&gt;DataSet&lt;/span&gt; dataSet = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="cobj"&gt;DataSet&lt;/span&gt;();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  321: &lt;/span&gt;      &lt;span class="kwrd"&gt;do&lt;/span&gt; {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  322: &lt;/span&gt;         &lt;span class="cobj"&gt;DataTable&lt;/span&gt; schemaTable = reader.GetSchemaTable();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  323: &lt;/span&gt;         &lt;span class="cobj"&gt;DataTable&lt;/span&gt; dataTable = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="cobj"&gt;DataTable&lt;/span&gt;();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  324: &lt;/span&gt;         &lt;span class="kwrd"&gt;if&lt;/span&gt; (schemaTable != &lt;span class="kwrd"&gt;null&lt;/span&gt;) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  325: &lt;/span&gt;            &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0; i &amp;lt; schemaTable.Rows.&lt;span class="linqkwrd"&gt;Count&lt;/span&gt;; i++) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  326: &lt;/span&gt;               &lt;span class="cobj"&gt;DataRow&lt;/span&gt; dataRow = schemaTable.Rows[i];&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  327: &lt;/span&gt;               &lt;span class="kwrd"&gt;string&lt;/span&gt; columnName = (&lt;span class="kwrd"&gt;string&lt;/span&gt;)dataRow[&lt;span class="str"&gt;"ColumnName"&lt;/span&gt;];&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  328: &lt;/span&gt;               &lt;span class="cobj"&gt;DataColumn&lt;/span&gt; column = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="cobj"&gt;DataColumn&lt;/span&gt;(columnName,&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  329: &lt;/span&gt;                   (&lt;span class="cobj"&gt;Type&lt;/span&gt;)dataRow[&lt;span class="str"&gt;"DataType"&lt;/span&gt;]);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  330: &lt;/span&gt;               dataTable.Columns.Add(column);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  331: &lt;/span&gt;            }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  332: &lt;/span&gt;&amp;#160;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  333: &lt;/span&gt;            dataSet.Tables.Add(dataTable);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  334: &lt;/span&gt;            &lt;span class="kwrd"&gt;while&lt;/span&gt; (reader.Read()) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  335: &lt;/span&gt;               &lt;span class="cobj"&gt;DataRow&lt;/span&gt; dataRow = dataTable.NewRow();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  336: &lt;/span&gt;               &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0; i &amp;lt; reader.FieldCount; i++)&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  337: &lt;/span&gt;                  dataRow[i] = reader.GetValue(i);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  338: &lt;/span&gt;               dataTable.Rows.Add(dataRow);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  339: &lt;/span&gt;            }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  340: &lt;/span&gt;         } &lt;span class="kwrd"&gt;else&lt;/span&gt; {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  341: &lt;/span&gt;            &lt;span class="rem"&gt;// No records were returned&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  342: &lt;/span&gt;            &lt;span class="cobj"&gt;DataColumn&lt;/span&gt; column = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="cobj"&gt;DataColumn&lt;/span&gt;(&lt;span class="str"&gt;"RowsAffected"&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  343: &lt;/span&gt;            dataTable.Columns.Add(column);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  344: &lt;/span&gt;            dataSet.Tables.Add(dataTable);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  345: &lt;/span&gt;            &lt;span class="cobj"&gt;DataRow&lt;/span&gt; dataRow = dataTable.NewRow();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  346: &lt;/span&gt;            dataRow[0] = reader.RecordsAffected;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  347: &lt;/span&gt;            dataTable.Rows.Add(dataRow);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  348: &lt;/span&gt;         }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  349: &lt;/span&gt;      }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  350: &lt;/span&gt;      &lt;span class="kwrd"&gt;while&lt;/span&gt; (reader.NextResult());&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  351: &lt;/span&gt;      &lt;span class="kwrd"&gt;return&lt;/span&gt; dataSet;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  352: &lt;/span&gt;   }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  353: &lt;/span&gt;   &lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  354: &lt;/span&gt;&amp;#160;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  355: &lt;/span&gt;   &lt;span class="preproc"&gt;#region&lt;/span&gt; Helper Classes&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  356: &lt;/span&gt;   &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; GenericTable {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  357: &lt;/span&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Column { &lt;span class="kwrd"&gt;get&lt;/span&gt;; &lt;span class="kwrd"&gt;set&lt;/span&gt;; }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  358: &lt;/span&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; &lt;span class="cobj"&gt;Type&lt;/span&gt; { &lt;span class="kwrd"&gt;get&lt;/span&gt;; &lt;span class="kwrd"&gt;set&lt;/span&gt;; }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  359: &lt;/span&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; Width { &lt;span class="kwrd"&gt;get&lt;/span&gt;; &lt;span class="kwrd"&gt;set&lt;/span&gt;; }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  360: &lt;/span&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; IsNullable { &lt;span class="kwrd"&gt;get&lt;/span&gt;; &lt;span class="kwrd"&gt;set&lt;/span&gt;; }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  361: &lt;/span&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; Length { &lt;span class="kwrd"&gt;get&lt;/span&gt;; &lt;span class="kwrd"&gt;set&lt;/span&gt;; }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  362: &lt;/span&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; DefaultValue { &lt;span class="kwrd"&gt;get&lt;/span&gt;; &lt;span class="kwrd"&gt;set&lt;/span&gt;; }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  363: &lt;/span&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; PrimaryKey { &lt;span class="kwrd"&gt;get&lt;/span&gt;; &lt;span class="kwrd"&gt;set&lt;/span&gt;; }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  364: &lt;/span&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; Identity { &lt;span class="kwrd"&gt;get&lt;/span&gt;; &lt;span class="kwrd"&gt;set&lt;/span&gt;; }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  365: &lt;/span&gt;   }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  366: &lt;/span&gt;   &lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  367: &lt;/span&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8419253340539253913-6954565037894046084?l=timorris.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timorris.blogspot.com/feeds/6954565037894046084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8419253340539253913&amp;postID=6954565037894046084' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8419253340539253913/posts/default/6954565037894046084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8419253340539253913/posts/default/6954565037894046084'/><link rel='alternate' type='text/html' href='http://timorris.blogspot.com/2009/02/sql-generation.html' title='SQL Generation'/><author><name>timorris</name><uri>http://www.blogger.com/profile/02870313310786211849</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/_y2z0ldyx_fQ/SQsih8vOzII/AAAAAAAAAPY/fezDxZtAVec/s1600-R/surprise.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8419253340539253913.post-6140960200435470356</id><published>2008-10-27T15:40:00.033-04:00</published><updated>2008-10-28T10:39:12.258-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DOS'/><category scheme='http://www.blogger.com/atom/ns#' term='Batch'/><category scheme='http://www.blogger.com/atom/ns#' term='Zip'/><category scheme='http://www.blogger.com/atom/ns#' term='Logs'/><title type='text'>More DOS batch fun</title><content type='html'>&lt;div style="font-family:Verdana;font-size:10pt;"&gt;Recently I needed to create a simple way to backup alot of website's log files.  The directory structure is such:&lt;/div&gt;&lt;br /&gt;&lt;div style="width:500px;border:1.0px solid #ffffff;padding:0px 5px 0px 5px;"&gt;&lt;pre style="font-family:Consolas,'Courier New';font-size:10pt;background-color:rgb(17,34,57);color:#FFFFA0;font-weight:bold;margin: 0px 5px 0px 5px;line-height:0.95em;"&gt;&lt;br /&gt;C:\DemoSites\&lt;br /&gt; |&lt;br /&gt; |----\Demo1&lt;br /&gt; |    |&lt;br /&gt; |    |-----\Logs&lt;br /&gt; |&lt;br /&gt; |----\Demo2&lt;br /&gt; |    |&lt;br /&gt; |    |-----\Logs&lt;br /&gt; |&lt;br /&gt; |----\Demo3&lt;br /&gt; |    |&lt;br /&gt; |    |-----\Logs&lt;br /&gt; |&lt;br /&gt; |----\Demo4&lt;br /&gt; |    |&lt;br /&gt; |    |-----\Logs&lt;br /&gt; |&lt;br /&gt;... etc&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div style="font-family:Verdana;font-size:10pt;"&gt;... So I need to backup the log files inside each "Logs" directory, in a loop...&lt;br /&gt;&lt;br /&gt;Here is the batch file that takes care of it:&lt;br /&gt;&lt;div style="overflow-x: auto;"&gt;&lt;br /&gt;&lt;div class="codeContainer700"&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   01: &lt;/span&gt;&lt;span class="kwrd"&gt;@ECHO&lt;/span&gt; &lt;span class="kwrd"&gt;OFF&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   02: &lt;/span&gt;&amp;#160;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   03: &lt;/span&gt;&lt;span class="rem"&gt;:: Get Today's Date in YYYYMMDD Format...&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   04: &lt;/span&gt;&lt;span class="kwrd"&gt;for&lt;/span&gt; /F &lt;span class="str"&gt;"tokens=2-4 delims=/ "&lt;/span&gt; %%a &lt;span class="kwrd"&gt;in&lt;/span&gt; (&lt;span class="str"&gt;'date/t'&lt;/span&gt;) &lt;span class="kwrd"&gt;do&lt;/span&gt; (set datevar=%%c%%a%%b)&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   05: &lt;/span&gt;&amp;#160;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   06: &lt;/span&gt;&lt;span class="rem"&gt;:: For each subdirectory of C:\DemoSites, Zip all log files in their Logs directories...&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   07: &lt;/span&gt;&lt;span class="kwrd"&gt;for&lt;/span&gt; /D %%d &lt;span class="kwrd"&gt;in&lt;/span&gt; (C:\DemoSites\*) &lt;span class="kwrd"&gt;do&lt;/span&gt; (&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   08: &lt;/span&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; &lt;span class="kwrd"&gt;exist&lt;/span&gt; %%d\Logs (&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   09: &lt;/span&gt;        &lt;span class="kwrd"&gt;for&lt;/span&gt; /F &lt;span class="str"&gt;"tokens=5 delims= "&lt;/span&gt; %%k &lt;span class="kwrd"&gt;in&lt;/span&gt; (&lt;span class="str"&gt;'dir %%d\..\.'&lt;/span&gt;) &lt;span class="kwrd"&gt;do&lt;/span&gt; (&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   10: &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; &lt;span class="kwrd"&gt;exist&lt;/span&gt; %%d\..\%%k\Logs\*.* (&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   11: &lt;/span&gt;                &lt;span class="kwrd"&gt;if not exist&lt;/span&gt; C:\Backup\archive_%%k-Logs_%datevar%.zip ( &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   12: &lt;/span&gt;                    \util\zip -9 -j C:\Backup\archive_%%k-Logs_%datevar%.zip %%d\..\%%k\Logs\*.*&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   13: &lt;/span&gt;                )&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   14: &lt;/span&gt;            )&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   15: &lt;/span&gt;        )&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   16: &lt;/span&gt;    )&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   17: &lt;/span&gt;)&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt; &lt;blockquote&gt;&lt;b&gt;[&amp;#160;Note: I'm using &lt;a href="http://www.info-zip.org/" target="_new"&gt;Info-Zip&lt;/a&gt; to compress the log files.&amp;#160;]&lt;/b&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8419253340539253913-6140960200435470356?l=timorris.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timorris.blogspot.com/feeds/6140960200435470356/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8419253340539253913&amp;postID=6140960200435470356' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8419253340539253913/posts/default/6140960200435470356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8419253340539253913/posts/default/6140960200435470356'/><link rel='alternate' type='text/html' href='http://timorris.blogspot.com/2008/10/more-dos-batch-fun.html' title='More DOS batch fun'/><author><name>timorris</name><uri>http://www.blogger.com/profile/02870313310786211849</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/_y2z0ldyx_fQ/SQsih8vOzII/AAAAAAAAAPY/fezDxZtAVec/s1600-R/surprise.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8419253340539253913.post-6745371923564230652</id><published>2008-10-16T14:42:00.120-04:00</published><updated>2008-11-05T09:38:57.811-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='osql'/><category scheme='http://www.blogger.com/atom/ns#' term='DOS'/><category scheme='http://www.blogger.com/atom/ns#' term='Batch'/><category scheme='http://www.blogger.com/atom/ns#' term='Zip'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Backup Databases in a loop...</title><content type='html'>&lt;div style="font-family:Verdana;font-size:12px;"&gt;&lt;br /&gt; &lt;b&gt;Note: This applies to Microsoft SQL Server 2005/2008...&lt;/b&gt;&lt;br/&gt;&lt;br /&gt; &amp;#160;&amp;#160;&amp;#160;&amp;#160;Ever get sick of having a different SQL Job for each database backup?  I created this method for backing up all databases (filtered) in a cursor. Just create a job with this as the Step and give the Job a schedule...&lt;br /&gt;&lt;/div&gt;&lt;div style="overflow-x: auto;"&gt;&lt;br /&gt;&lt;div class="codeContainer"&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  01:  &lt;/span&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @dbName &lt;span class="kwrd"&gt;varchar&lt;/span&gt;(50)&lt;/pre&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  02:  &lt;/span&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @BKPDate &lt;span class="kwrd"&gt;varchar&lt;/span&gt;(10)&lt;/pre&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  03:  &lt;/span&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @sql &lt;span class="kwrd"&gt;nvarchar&lt;/span&gt;(1000)&lt;/pre&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  04:  &lt;/span&gt;&lt;span class="kwrd"&gt;SET&lt;/span&gt; @BKPDate = &lt;span class="sqlkwrd"&gt;replace&lt;/span&gt;(&lt;span class="kwrd"&gt;convert&lt;/span&gt;(&lt;span class="kwrd"&gt;varchar&lt;/span&gt;(10), &lt;span class="sqlkwrd"&gt;getdate&lt;/span&gt;(), 102), &lt;span class="str"&gt;'.'&lt;/span&gt;, &lt;span class="str"&gt;''&lt;/span&gt;)&lt;/pre&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  05:  &lt;/span&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; bkpCursor &lt;span class="kwrd"&gt;CURSOR&lt;/span&gt; &lt;span class="kwrd"&gt;FOR&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  06:  &lt;/span&gt;    &lt;/pre&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  07:  &lt;/span&gt;    &lt;span class="rem"&gt;/* only backup non-system databases */&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  08:  &lt;/span&gt;    &lt;span class="kwrd"&gt;select&lt;/span&gt; [Name] &lt;span class="kwrd"&gt;from&lt;/span&gt; &lt;span class="sqlkwrd"&gt;sys.databases&lt;/span&gt; &lt;span class="kwrd"&gt;where&lt;/span&gt; [owner_sid] &amp;lt;&amp;gt; 0x01&lt;/pre&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  09:  &lt;/span&gt;        &lt;/pre&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;&lt;span class="kwrd"&gt;OPEN&lt;/span&gt; bkpCursor&lt;/pre&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;&lt;span class="kwrd"&gt;FETCH&lt;/span&gt; &lt;span class="kwrd"&gt;NEXT&lt;/span&gt; &lt;span class="kwrd"&gt;FROM&lt;/span&gt; bkpCursor &lt;span class="kwrd"&gt;INTO&lt;/span&gt;  @dbName&lt;/pre&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;&lt;span class="kwrd"&gt;IF&lt;/span&gt; &lt;span class="sqlkwrd"&gt;@@FETCH_STATUS&lt;/span&gt; = 0&lt;/pre&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;&lt;span class="kwrd"&gt;BEGIN&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;    &lt;span class="kwrd"&gt;WHILE&lt;/span&gt; (&lt;span class="sqlkwrd"&gt;@@FETCH_STATUS&lt;/span&gt; = 0)&lt;/pre&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;    &lt;span class="kwrd"&gt;BEGIN&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;    &lt;span class="kwrd"&gt;set&lt;/span&gt; @sql = &lt;/pre&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        &lt;span class="str"&gt;' BACKUP DATABASE '&lt;/span&gt;+ @dbName +&lt;/pre&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;        &lt;span class="str"&gt;' TO DISK = N'&lt;/span&gt;&lt;span class="str"&gt;'C:\SQLBackup\'&lt;/span&gt;+ @dbName +&lt;span class="str"&gt;'_'&lt;/span&gt;+ @BKPDate +&lt;span class="str"&gt;'.bak'&lt;/span&gt;&lt;span class="str"&gt;''&lt;/span&gt; +&lt;/pre&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;        &lt;span class="str"&gt;' WITH NOFORMAT, NOINIT,'&lt;/span&gt;+&lt;/pre&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;        &lt;span class="str"&gt;' NAME = N'&lt;/span&gt;&lt;span class="str"&gt;''&lt;/span&gt;+ @dbName +&lt;span class="str"&gt;'-Full Database Backup'&lt;/span&gt;&lt;span class="str"&gt;','&lt;/span&gt; +&lt;/pre&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;        &lt;span class="str"&gt;' SKIP, STATS = 10;'&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;    &lt;span class="kwrd"&gt;exec&lt;/span&gt; &lt;span class="sqlkwrd"&gt;sp_executesql&lt;/span&gt; @statement = @sql&lt;/pre&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;    &lt;span class="kwrd"&gt;FETCH&lt;/span&gt; &lt;span class="kwrd"&gt;NEXT&lt;/span&gt; &lt;span class="kwrd"&gt;FROM&lt;/span&gt; bkpCursor &lt;span class="kwrd"&gt;INTO&lt;/span&gt; @dbName&lt;/pre&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;    &lt;span class="kwrd"&gt;END&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;&lt;span class="kwrd"&gt;END&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;&lt;span class="kwrd"&gt;ELSE&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;    &lt;span class="kwrd"&gt;PRINT&lt;/span&gt; &lt;span class="str"&gt;'No Databases to Backup.'&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;&lt;span class="kwrd"&gt;CLOSE&lt;/span&gt; bkpCursor&lt;/pre&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;&lt;span class="kwrd"&gt;DEALLOCATE&lt;/span&gt; bkpCursor&lt;/pre&gt;&lt;br /&gt; &lt;/div&gt;&lt;/div&gt; &lt;/div&gt;&lt;br /&gt; &lt;div style="font-family:Verdana;font-size:12px;"&gt;&lt;br /&gt; &lt;span style="color: #FF6600;font-weight:bold;"&gt;&lt;u&gt;MS SQL Server Express Edition&lt;/u&gt;&lt;/span&gt;&lt;br/&gt;&lt;br /&gt; But what if you're running MS SQL Server Express?  That doesn't come with SQL Server Agent Service, which is required for creating Jobs.  Use the osql command-line utility.&lt;br/&gt;&lt;br /&gt; Here is a batch file I wrote which uses osql to call a sql script file (after saving the above syntax into a sql file called "backup_Databases.sql").&amp;#160;&amp;#160;Then I zip up the backup files and delete them.&lt;br /&gt; &lt;div style="overflow-x: auto;"&gt;&lt;br /&gt; &lt;div class="codeContainer"&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  01:  &lt;/span&gt;&lt;span class="kwrd"&gt;@ECHO OFF&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  02:  &lt;/span&gt;osql -E -i &lt;span class="str"&gt;"C:\backup\scripts\backup_Databases.sql"&lt;/span&gt; &amp;gt; NUL&lt;/pre&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  03:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  04:  &lt;/span&gt;C:\util\zip -9 -j -q C:\backup\archive_db_%1.zip C:\SQLBackup\*%1.bak&lt;/pre&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  05:  &lt;/span&gt;&lt;span class="kwrd"&gt;IF EXIST&lt;/span&gt; C:\backup\archive_db_%1.zip (&lt;/pre&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  06:  &lt;/span&gt;   &lt;span class="kwrd"&gt;del&lt;/span&gt; C:\SQLBackup\*%1.bak&lt;/pre&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  07:  &lt;/span&gt;)&lt;/pre&gt;&lt;br /&gt; &lt;/div&gt;&lt;/div&gt; &lt;/div&gt;&lt;i&gt;This batch file assumes you are passing in a Date string.&lt;/i&gt;&lt;br/&gt;&lt;br /&gt; So to call it I would type:&lt;br /&gt; &lt;img src="http://i102.photobucket.com/albums/m102/tlm3229/blog%20pics/call_bat.jpg" border="0" alt="call batch file" /&gt;&lt;br /&gt; &lt;blockquote&gt;&lt;b&gt;[&amp;#160;Note: I'm using &lt;a href="http://www.info-zip.org/" target="_new"&gt;Info-Zip&lt;/a&gt; to compress the backup files.&amp;#160;]&lt;/b&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;font-size:12px;"&gt;&lt;span style="color: #FF6600;font-weight:bold;"&gt;&lt;u&gt;Stand-alone Batch File&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;font-size:12px;"&gt;I know what you're thinking...&amp;#160;&amp;#160;Why not make the batch file smart enough to get the date instead of having to pass it in?&lt;/span&gt;&lt;br/&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;font-size:12px;"&gt;Here is a revised batch file which does just that:&lt;/span&gt;&lt;div style="overflow-x: auto;"&gt;&lt;div class="codeContainer"&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;   &lt;pre&gt;&lt;span class="lnum"&gt;  01:  &lt;/span&gt;&lt;span class="kwrd"&gt;@ECHO OFF&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;   &lt;pre&gt;&lt;span class="lnum"&gt;  02:  &lt;/span&gt;osql -E -i &lt;span class="str"&gt;"C:\backup\scripts\backup_Databases.sql"&lt;/span&gt; &amp;gt; NUL&lt;/pre&gt;&lt;br /&gt;   &lt;pre&gt;&lt;span class="lnum"&gt;  03:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;   &lt;pre&gt;&lt;span class="lnum"&gt;  04:  &lt;/span&gt;&lt;span class="kwrd"&gt;for&lt;/span&gt; /f &lt;span class="str"&gt;"tokens=2-4 delims=/ "&lt;/span&gt; %%a &lt;span class="kwrd"&gt;in&lt;/span&gt; (&lt;span class="str"&gt;'date/t'&lt;/span&gt;) &lt;span class="kwrd"&gt;do&lt;/span&gt; (set datevar=%%c%%a%%b)&lt;/pre&gt;&lt;br /&gt;   &lt;pre&gt;&lt;span class="lnum"&gt;  05:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;   &lt;pre&gt;&lt;span class="lnum"&gt;  06:  &lt;/span&gt;C:\util\zip -9 -j -q C:\backup\archive_db_%datevar%.zip C:\SQLBackup\*%datevar%.bak&lt;/pre&gt;&lt;br /&gt;   &lt;pre&gt;&lt;span class="lnum"&gt;  07:  &lt;/span&gt;&lt;span class="kwrd"&gt;IF EXIST&lt;/span&gt; C:\backup\archive_db_%datevar%.zip (&lt;/pre&gt;&lt;br /&gt;   &lt;pre&gt;&lt;span class="lnum"&gt;  08:  &lt;/span&gt;   &lt;span class="kwrd"&gt;del&lt;/span&gt; C:\SQLBackup\*%datevar%.bak&lt;/pre&gt;&lt;br /&gt;   &lt;pre&gt;&lt;span class="lnum"&gt;  09:  &lt;/span&gt;)&lt;/pre&gt;&lt;br /&gt;  &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="font-family:Verdana;font-size:12px;"&gt;&lt;br /&gt; &lt;span style="color: #FF6600;font-weight:bold;"&gt;&lt;u&gt;What's left?&lt;/u&gt;&lt;/span&gt;&lt;br/&gt;&lt;br /&gt; All that's left is to create a scheduled task using Windows Task Scheduler, which will call the batch file (daily, weekly, etc.).&lt;br /&gt;&lt;/div&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8419253340539253913-6745371923564230652?l=timorris.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timorris.blogspot.com/feeds/6745371923564230652/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8419253340539253913&amp;postID=6745371923564230652' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8419253340539253913/posts/default/6745371923564230652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8419253340539253913/posts/default/6745371923564230652'/><link rel='alternate' type='text/html' href='http://timorris.blogspot.com/2008/10/backup-databases-in-loop.html' title='Backup Databases in a loop...'/><author><name>timorris</name><uri>http://www.blogger.com/profile/02870313310786211849</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/_y2z0ldyx_fQ/SQsih8vOzII/AAAAAAAAAPY/fezDxZtAVec/s1600-R/surprise.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://i102.photobucket.com/albums/m102/tlm3229/blog%20pics/th_call_bat.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8419253340539253913.post-2905915799957409287</id><published>2008-10-15T14:28:00.056-04:00</published><updated>2008-10-28T10:37:45.313-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='OOP'/><category scheme='http://www.blogger.com/atom/ns#' term='LINQ'/><title type='text'>General practices (tomAYto tomAHto)...</title><content type='html'>&lt;div style="font-family:Verdana;font-size:12px;"&gt;I hate repeating code and sometimes generics can make things a bit easier.  One of the things that needs to be done a lot with Drop-down lists is adding a "Please Select" as the first option, but I don't particularly like doing that in the data layer (stored procedure, etc.).  I like to add that to the list, but why repeat the same code for every Drop-down list if there are several on the page?  Here is one way I like to take care of that:&lt;/div&gt;&lt;br /&gt;&lt;div style="font-family:Verdana;font-size:12px;"&gt;Here are the supporting Classes:&lt;/div&gt;&lt;div style="overflow: auto;"&gt;&lt;br /&gt;&lt;div class="codeContainer"&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  01:  &lt;/span&gt;&lt;span class="preproc"&gt;#region&lt;/span&gt; Supporting Classes&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  02:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; IReportObject {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  03:  &lt;/span&gt;    &lt;span class="kwrd"&gt;int&lt;/span&gt; ID { get; set; }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  04:  &lt;/span&gt;    &lt;span class="kwrd"&gt;string&lt;/span&gt; Name { get; set; }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  05:  &lt;/span&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  06:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; CSP : IReportObject {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  07:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; ID { get; set; }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  08:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Name { get; set; }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  09:  &lt;/span&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Base : IReportObject {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; ID { get; set; }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Name { get; set; }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Property : IReportObject {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; ID { get; set; }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Name { get; set; }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;&lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt; &lt;/div&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;font-size:12px;"&gt;Here is the method that all my Drop-down list binders will call.  Notice the "new()" constraint, which is needed in order to instantiate a generic.  Notice also that I'm going ahead here and changing the text based on whether or not the list is empty.  It wouldn't be very helpful to have an empty Drop-down list with just a "Please Select" option and nothing else. What's not shown here is that in the presentation layer, if there are no options to select in any given Drop-down list, the control is disabled as well.&lt;/span&gt;&lt;div style="overflow: auto;"&gt;&lt;br /&gt;&lt;div class="codeContainer"&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  01:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; InsertBefore&amp;lt;T&amp;gt;(List&amp;lt;T&amp;gt; list)&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  02:  &lt;/span&gt;  &lt;span class="kwrd"&gt;where&lt;/span&gt; T : IReportObject, &lt;span class="kwrd"&gt;new&lt;/span&gt;() {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  03:  &lt;/span&gt;    list.Insert(0, &lt;span class="kwrd"&gt;new&lt;/span&gt; T { ID = 0, Name = ((list.Count() &amp;gt; 0) ? &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  04:  &lt;/span&gt;       &lt;span class="str"&gt;"-- Please Select --"&lt;/span&gt; : &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  05:  &lt;/span&gt;       &lt;span class="str"&gt;"-- No Data Found --"&lt;/span&gt;) });&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  06:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt; &lt;/div&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;font-size:12px;"&gt;And here is one of the methods binding one of my Drop-down lists calling the method...&lt;/span&gt;&lt;div style="overflow: auto;"&gt;&lt;br /&gt;&lt;div class="codeContainer"&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  01:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; List&amp;lt;CSP&amp;gt; GetCSPs() {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  02:  &lt;/span&gt;    &lt;span class="kwrd"&gt;var&lt;/span&gt; list = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;CSP&amp;gt;();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  03:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; (SqlDataReader rs = DBAccess.getRS(&lt;span class="str"&gt;"cspGetMilitaryCSPs"&lt;/span&gt;)) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  04:  &lt;/span&gt;        &lt;span class="kwrd"&gt;while&lt;/span&gt; (rs.Read()) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  05:  &lt;/span&gt;            list.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; CSP {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  06:  &lt;/span&gt;                ID = DBAccess.ToInt32(rs[&lt;span class="str"&gt;"CSPID"&lt;/span&gt;], 0),&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  07:  &lt;/span&gt;                Name = DBAccess.ToStringValue(rs[&lt;span class="str"&gt;"CSPName"&lt;/span&gt;], &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty)&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  08:  &lt;/span&gt;            });&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  09:  &lt;/span&gt;        }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    InsertBefore&amp;lt;CSP&amp;gt;(list);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; list;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt; &lt;/div&gt;&lt;br /&gt;&lt;div style="font-family:Verdana;font-size:12px;"&gt;Alas, here is another way I'm doing basically the same thing using LINQ's &lt;u&gt;Union&lt;/u&gt; operator.  Doing it this way circumvents having to call the 'InsertBefore' method:&lt;/div&gt;&lt;div style="overflow-x:auto"&gt;&lt;div class="codeContainer"&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  01:  &lt;/span&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; IEnumerable&amp;lt;PatientData&amp;gt; BindPatientData() {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  02:  &lt;/span&gt;    List&amp;lt;PatientData&amp;gt; opt = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;PatientData&amp;gt;();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  03:  &lt;/span&gt;    IOrderedQueryable&amp;lt;PatientData&amp;gt; set = &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  04:  &lt;/span&gt;        (&lt;span class="kwrd"&gt;from&lt;/span&gt; p &lt;span class="kwrd"&gt;in&lt;/span&gt; db.Patients&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  05:  &lt;/span&gt;         &lt;span class="kwrd"&gt;select new&lt;/span&gt; PatientData {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  06:  &lt;/span&gt;             PatientID = p.PatientID,&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  07:  &lt;/span&gt;             PatientName = p.FirstName + &lt;span class="str"&gt;" "&lt;/span&gt; + p.LastName&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  08:  &lt;/span&gt;         }).&lt;span class="kwrd"&gt;OrderBy&lt;/span&gt;(o =&amp;gt; o.PatientName);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  09:  &lt;/span&gt;    opt.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; PatientData {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        PatientID = -1, &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        PatientName = (set.Count() &amp;gt; 0) ?  &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;        &lt;span class="str"&gt;"-- Please Select --"&lt;/span&gt; : &lt;span class="str"&gt;"-- No Data Found --"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    });&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;    &lt;span style="background-color: #FFFF00;"&gt;&lt;span class="kwrd"&gt;return&lt;/span&gt; opt.Union(set.AsEnumerable()); &lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8419253340539253913-2905915799957409287?l=timorris.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timorris.blogspot.com/feeds/2905915799957409287/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8419253340539253913&amp;postID=2905915799957409287' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8419253340539253913/posts/default/2905915799957409287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8419253340539253913/posts/default/2905915799957409287'/><link rel='alternate' type='text/html' href='http://timorris.blogspot.com/2008/10/general-re-use.html' title='General practices (tomAYto tomAHto)...'/><author><name>timorris</name><uri>http://www.blogger.com/profile/02870313310786211849</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/_y2z0ldyx_fQ/SQsih8vOzII/AAAAAAAAAPY/fezDxZtAVec/s1600-R/surprise.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8419253340539253913.post-8664728542701044019</id><published>2008-10-14T18:55:00.033-04:00</published><updated>2008-10-28T10:37:10.079-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Extentions'/><title type='text'>Extend MVC HtmlHelper methods...</title><content type='html'>&lt;div style="font-family:Verdana;font-size:13px;"&gt;I always like to use helper methods, and the ASP.NET MVC HtmlHelper methods are great.  But sometimes you need some extra logic that they don't provide... Enter custom extension methods.&lt;br/&gt;&lt;br /&gt;Here is a class I wrote specifically for extension methods (&lt;i&gt;Note: Some of the extension methods are calling some static Utility methods, and their implementation is not shown here&lt;/i&gt;):&lt;br /&gt;&lt;div style="overflow: auto;"&gt;&lt;div class="codeContainer700"&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  01:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; HtmlHelperExtensions {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  02:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  03:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; DateFormatterTextBox(&lt;span class="kwrd"&gt;this&lt;/span&gt; HtmlHelper htmlHelper, &lt;span class="kwrd"&gt;string&lt;/span&gt; name, &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  04:  &lt;/span&gt;        DateTime date, &lt;span class="kwrd"&gt;string&lt;/span&gt; format, &lt;span class="kwrd"&gt;object&lt;/span&gt; attributes) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  05:  &lt;/span&gt;        &lt;span class="kwrd"&gt;string&lt;/span&gt; val = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(format, date);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  06:  &lt;/span&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (date.Year == 1900)&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  07:  &lt;/span&gt;            val = &lt;span class="str"&gt;"0000-00-00"&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  08:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; htmlHelper.TextBox(name, val, attributes);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  09:  &lt;/span&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; DateFormatterTextBox(&lt;span class="kwrd"&gt;this&lt;/span&gt; HtmlHelper htmlHelper, &lt;span class="kwrd"&gt;string&lt;/span&gt; name, &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        DateTime date, &lt;span class="kwrd"&gt;string&lt;/span&gt; format) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;        &lt;span class="kwrd"&gt;string&lt;/span&gt; val = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(format, date);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (date.Year == 1900)&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;            val = &lt;span class="str"&gt;"0000-00-00"&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; htmlHelper.TextBox(name, val);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; TimeFormatterTextBox(&lt;span class="kwrd"&gt;this&lt;/span&gt; HtmlHelper htmlHelper, &lt;span class="kwrd"&gt;string&lt;/span&gt; name, &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;        &lt;span class="kwrd"&gt;int&lt;/span&gt; time, &lt;span class="kwrd"&gt;object&lt;/span&gt; attributes) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;        &lt;span class="kwrd"&gt;string&lt;/span&gt; val = Utility.ConvertIntToTimeString(time);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; htmlHelper.TextBox(name, val, attributes);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; TimeFormatterTextBox(&lt;span class="kwrd"&gt;this&lt;/span&gt; HtmlHelper htmlHelper, &lt;span class="kwrd"&gt;string&lt;/span&gt; name, &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;        &lt;span class="kwrd"&gt;int&lt;/span&gt; time) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;        &lt;span class="kwrd"&gt;string&lt;/span&gt; val = Utility.ConvertIntToTimeString(time);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; htmlHelper.TextBox(name, val);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; MaskFormatterTextBox(&lt;span class="kwrd"&gt;this&lt;/span&gt; HtmlHelper htmlHelper, &lt;span class="kwrd"&gt;string&lt;/span&gt; name, &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;        &lt;span class="kwrd"&gt;int&lt;/span&gt; mask, &lt;span class="kwrd"&gt;object&lt;/span&gt; attributes) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;        &lt;span class="kwrd"&gt;string&lt;/span&gt; val = Utility.ConvertMaskToStartDays(mask);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; htmlHelper.TextBox(name, val, attributes);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; MaskFormatterTextBox(&lt;span class="kwrd"&gt;this&lt;/span&gt; HtmlHelper htmlHelper, &lt;span class="kwrd"&gt;string&lt;/span&gt; name, &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;        &lt;span class="kwrd"&gt;int&lt;/span&gt; mask) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;        &lt;span class="kwrd"&gt;string&lt;/span&gt; val = Utility.ConvertMaskToStartDays(mask);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; htmlHelper.TextBox(name, val);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt; &lt;/div&gt;&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;Here is the View that is using my extension methods...&lt;br /&gt;&lt;div style="overflow: auto;"&gt;&lt;div class="codeContainer700"&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  01:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Start Days:&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  02:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;=Html.MaskFormatterTextBox(&lt;span class="str"&gt;"StartDays"&lt;/span&gt;, ViewData.Model.StartDays.Value, &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  03:  &lt;/span&gt;            &lt;span class="kwrd"&gt;new&lt;/span&gt; { size = 50 })&lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  04:  &lt;/span&gt;        &lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;=Html.ValidationMessage(&lt;span class="str"&gt;"StartDays"&lt;/span&gt;, &lt;span class="str"&gt;"*"&lt;/span&gt;)&lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  05:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  06:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Start Date:&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  07:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;=Html.DateFormatterTextBox(&lt;span class="str"&gt;"StartDate"&lt;/span&gt;, ViewData.Model.StartDate.Value,&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  08:  &lt;/span&gt;            &lt;span class="str"&gt;"{0:yyyy-MM-dd}"&lt;/span&gt;, &lt;span class="kwrd"&gt;new&lt;/span&gt; { size = 50 })&lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  09:  &lt;/span&gt;        &lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;=Html.ValidationMessage(&lt;span class="str"&gt;"StartDate"&lt;/span&gt;, &lt;span class="str"&gt;"*"&lt;/span&gt;)&lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;End Date:&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;=Html.DateFormatterTextBox(&lt;span class="str"&gt;"EndDate"&lt;/span&gt;, ViewData.Model.EndDate.Value, &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;            &lt;span class="str"&gt;"{0:yyyy-MM-dd}"&lt;/span&gt;, &lt;span class="kwrd"&gt;new&lt;/span&gt; { size = 50 })&lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        &lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;=Html.ValidationMessage(&lt;span class="str"&gt;"EndDate"&lt;/span&gt;, &lt;span class="str"&gt;"*"&lt;/span&gt;)&lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Start Time:&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;=Html.TimeFormatterTextBox(&lt;span class="str"&gt;"StartTime"&lt;/span&gt;, ViewData.Model.StartTime.Value)&lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;        &lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;=Html.ValidationMessage(&lt;span class="str"&gt;"StartTime"&lt;/span&gt;, &lt;span class="str"&gt;"*"&lt;/span&gt;)&lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;End Time:&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;=Html.TimeFormatterTextBox(&lt;span class="str"&gt;"EndTime"&lt;/span&gt;, ViewData.Model.EndTime.Value)&lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;        &lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;=Html.ValidationMessage(&lt;span class="str"&gt;"EndTime"&lt;/span&gt;, &lt;span class="str"&gt;"*"&lt;/span&gt;)&lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt; &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8419253340539253913-8664728542701044019?l=timorris.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timorris.blogspot.com/feeds/8664728542701044019/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8419253340539253913&amp;postID=8664728542701044019' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8419253340539253913/posts/default/8664728542701044019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8419253340539253913/posts/default/8664728542701044019'/><link rel='alternate' type='text/html' href='http://timorris.blogspot.com/2008/10/extend-mvc-htmlhelper-methods.html' title='Extend MVC HtmlHelper methods...'/><author><name>timorris</name><uri>http://www.blogger.com/profile/02870313310786211849</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/_y2z0ldyx_fQ/SQsih8vOzII/AAAAAAAAAPY/fezDxZtAVec/s1600-R/surprise.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8419253340539253913.post-4229964107237855831</id><published>2008-10-14T13:48:00.080-04:00</published><updated>2008-11-05T09:41:55.095-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Service'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='SSRS'/><category scheme='http://www.blogger.com/atom/ns#' term='LINQ'/><title type='text'>Configure Microsoft SSRS to use a Web Service as a Data Source...</title><content type='html'>&lt;div style="font-family:verdana;font-size:13px;"&gt;&lt;br /&gt;    I recently created a SQL Server Reporting Services (SSRS) report which used a Stored Procedure as a datasource, but the report needed some extra customization we're getting by using PaxScript in a similar web page.  This isn't easily achievable using SQL stored procedures, so I decided to use a web service instead as the data source for the report.  This way I have the advantage of LINQ/C# and PaxScript.  Also, we have a need to run different versions of the web service, each for a different client.  So the data source's web service URL needs to be dynamic, rather than static.&lt;br/&gt;&lt;br /&gt;    Here's how it's done...&lt;br/&gt;&lt;br /&gt;    In the report Data Source properties, the Type is XML and the Connection string value is a Report Parameter:&lt;br /&gt;        &lt;img src="http://i102.photobucket.com/albums/m102/tlm3229/blog%20pics/1.jpg" border="0" alt="screenshot - SSRS Datasource" /&gt;&lt;br/&gt;&lt;br /&gt;    Next, the report's Dataset Text should be in the following format:&lt;br /&gt;&lt;img src="http://i102.photobucket.com/albums/m102/tlm3229/blog%20pics/2.jpg" border="0" alt="screenshot - SSRS Dataset" style="border:1.0px dotted #676767;"/&gt;&lt;br/&gt;&lt;br /&gt;    &lt;i&gt;Note: There is a Parameter for each Web Service method parameter with the correct Name and Type.  The ElementPath value is derived partly from the WSDL and partly from the XML that the Web Service method returns:&lt;/i&gt; &lt;br /&gt; &lt;br/&gt;&lt;i&gt;From WSDL:&lt;/i&gt;&lt;br /&gt; &lt;font style="font-family:Consolas, 'courier new';font-weight:bold;color: #6699FF;font-size:12px;"&gt; "GetPatientVentDataLinqResponse{}/GetPatientVentDataLinqResult{}" &lt;/font&gt;&lt;br /&gt; &lt;br/&gt;&lt;br /&gt; &lt;i&gt;from the Web Service returned XML.&lt;/i&gt;&lt;br /&gt; &lt;font style="font-family:Consolas, 'courier new';font-weight:bold;color: #6699FF;font-size:12px;"&gt;"/PatientVentData{}/Result{ParameterName,ParameterData,UpdateTime}"&lt;/font&gt;&lt;br/&gt;&lt;br /&gt; &lt;div style="overflow: auto;"&gt;&lt;fieldset style="border:0px dotted #eee;"&gt;&lt;b&gt;Sample XML:&lt;/b&gt;&lt;br /&gt;    &lt;div class="codeContainer"&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  01:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;="1.0"&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;="utf-8"&lt;/span&gt; ?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  02:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;PatientVentData&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  03:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Result&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  04:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ParameterName&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Tidal Vol exp (ml)&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ParameterName&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  05:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ParameterData&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;342.0&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ParameterData&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  06:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;UpdateTime&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;1/1/2008 07:31:03 [Gallileo - 9]&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;UpdateTime&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  07:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Result&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  08:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;PatientVentData&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/fieldset&gt; &lt;/div&gt;&lt;br/&gt;&lt;br /&gt;    Here is the Web Service method:&lt;br /&gt;&lt;div style="overflow: auto;"&gt;&lt;br /&gt; &lt;div class="codeContainer700"&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   01: &lt;/span&gt;[WebMethod]&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   02: &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; XmlDocument GetPatientVentDataLinq(&lt;span class="kwrd"&gt;string&lt;/span&gt; patientId, &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   03: &lt;/span&gt;    &lt;span class="kwrd"&gt;string&lt;/span&gt; beginDate, &lt;span class="kwrd"&gt;string&lt;/span&gt; endDate, &lt;span class="kwrd"&gt;string&lt;/span&gt; deviceID, &lt;span class="kwrd"&gt;string&lt;/span&gt; userTimeZone) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   04: &lt;/span&gt;    DataTable result = PatientController.GetVentData(&lt;span class="kwrd"&gt;true&lt;/span&gt;, &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   05: &lt;/span&gt;            SafeCast.Int(patientId), &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   06: &lt;/span&gt;            SafeCast.Date(beginDate), &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   07: &lt;/span&gt;            SafeCast.Date(endDate), &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   08: &lt;/span&gt;            SafeCast.Int(deviceID),&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   09: &lt;/span&gt;            userTimeZone);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   10: &lt;/span&gt;    IEnumerable&amp;lt;DataRow&amp;gt; rows = result.&lt;span class="linqkwrd"&gt;AsEnumerable&lt;/span&gt;();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   11: &lt;/span&gt;    List&amp;lt;TReads[]&amp;gt; _reads = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;TReads[]&amp;gt;();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   12: &lt;/span&gt;    &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (DataColumn _col &lt;span class="kwrd"&gt;in&lt;/span&gt; result.Columns) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   13: &lt;/span&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (_col.ColumnName.&lt;span class="linqkwrd"&gt;Contains&lt;/span&gt;(&lt;span class="str"&gt;"Column"&lt;/span&gt;) ||&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   14: &lt;/span&gt;            _col.ColumnName == &lt;span class="str"&gt;"Parameter"&lt;/span&gt;) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   15: &lt;/span&gt;            &lt;span class="linqkwrd"&gt;var&lt;/span&gt; set = (&lt;span class="linqkwrd"&gt;from&lt;/span&gt; ro &lt;span class="kwrd"&gt;in&lt;/span&gt; rows&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   16: &lt;/span&gt;                       &lt;span class="linqkwrd"&gt;select&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; TReads (&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   17: &lt;/span&gt;                           ro.Field&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;(result.Columns[0].ColumnName),&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   18: &lt;/span&gt;                           (result.Columns.&lt;span class="linqkwrd"&gt;Contains&lt;/span&gt;(_col.ColumnName) ?&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   19: &lt;/span&gt;                                ro.Field&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;(_col.ColumnName) : &lt;span class="kwrd"&gt;null&lt;/span&gt;),&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   20: &lt;/span&gt;                           _col.Caption&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   21: &lt;/span&gt;                       )).&lt;span class="linqkwrd"&gt;OrderByDescending&lt;/span&gt;(o =&amp;gt; o.UpdateTime);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   22: &lt;/span&gt;            _reads.Add(set.&lt;span class="linqkwrd"&gt;ToArray&lt;/span&gt;());  &lt;span class="rem"&gt;// ToArray() is to offset LINQ's deferred execution.&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   23: &lt;/span&gt;        }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   24: &lt;/span&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   25: &lt;/span&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (_reads.&lt;span class="linqkwrd"&gt;Count&lt;/span&gt; &amp;gt; 0) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   26: &lt;/span&gt;        &lt;span class="linqkwrd"&gt;var&lt;/span&gt; re = &lt;span class="linqkwrd"&gt;from&lt;/span&gt; o &lt;span class="kwrd"&gt;in&lt;/span&gt; _reads&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   27: &lt;/span&gt;                 &lt;span class="linqkwrd"&gt;select&lt;/span&gt; o;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   28: &lt;/span&gt;        XElement xDoc = &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   29: &lt;/span&gt;            &lt;span class="kwrd"&gt;new&lt;/span&gt; XElement(&lt;span class="str"&gt;"PatientVentData"&lt;/span&gt;,&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   30: &lt;/span&gt;                &lt;span class="linqkwrd"&gt;from&lt;/span&gt; x &lt;span class="kwrd"&gt;in&lt;/span&gt; re&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   31: &lt;/span&gt;                &lt;span class="linqkwrd"&gt;select&lt;/span&gt; (&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   32: &lt;/span&gt;                    &lt;span class="linqkwrd"&gt;from&lt;/span&gt; t &lt;span class="kwrd"&gt;in&lt;/span&gt; x&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   33: &lt;/span&gt;                    &lt;span class="kwrd"&gt;where&lt;/span&gt; t.UpdateTime != &lt;span class="str"&gt;"Parameter"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   34: &lt;/span&gt;                    &lt;span class="linqkwrd"&gt;select&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; XElement(&lt;span class="str"&gt;"Result"&lt;/span&gt;,&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   35: &lt;/span&gt;                        &lt;span class="kwrd"&gt;new&lt;/span&gt; XElement(&lt;span class="str"&gt;"ParameterName"&lt;/span&gt;, t.ParameterName),&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   36: &lt;/span&gt;                        &lt;span class="kwrd"&gt;new&lt;/span&gt; XElement(&lt;span class="str"&gt;"ParameterData"&lt;/span&gt;, t.ParameterData),&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   37: &lt;/span&gt;                        &lt;span class="kwrd"&gt;new&lt;/span&gt; XElement(&lt;span class="str"&gt;"UpdateTime"&lt;/span&gt;, t.UpdateTime)&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   38: &lt;/span&gt;                    )&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   39: &lt;/span&gt;                )&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   40: &lt;/span&gt;            );&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   41: &lt;/span&gt;        XmlDocument xmlDocument = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlDocument();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   42: &lt;/span&gt;        xmlDocument.LoadXml(xDoc.ToString());&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   43: &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; xmlDocument;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   44: &lt;/span&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   45: &lt;/span&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; GetEmptySet();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   46: &lt;/span&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   47: &lt;/span&gt;&amp;#160;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt; &lt;/div&gt;&lt;br/&gt;&lt;br /&gt;    Here is part the code that calls the Report Service:&lt;br/&gt;&lt;br /&gt;    (&lt;i&gt;this segment of code establishes the Web Service URL relative to it's own URL and assigns it to the Report Parameters used to call the Report&lt;/i&gt;)&lt;br /&gt;    &lt;div style="overflow:auto;"&gt;&lt;br /&gt;&lt;div class="codeContainer750"&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  01:  &lt;/span&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; url = Request.Url.AbsoluteUri;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  02:  &lt;/span&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; index = url.IndexOf(AppRelativeVirtualPath.Substring(1));&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  03:  &lt;/span&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; webServiceUrl = url.Substring(0, index) + &lt;span class="str"&gt;"/Services/BridgeTechVentHistory.asmx"&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  04:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  05:  &lt;/span&gt;ParameterValue[] parms = &lt;span class="kwrd"&gt;new&lt;/span&gt; ParameterValue[] {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  06:  &lt;/span&gt;    &lt;span class="kwrd"&gt;new&lt;/span&gt; ParameterValue { Name = &lt;span class="str"&gt;"patientID"&lt;/span&gt;, Value = Request.QueryString[_requestString[0].Name] },&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  07:  &lt;/span&gt;    &lt;span class="kwrd"&gt;new&lt;/span&gt; ParameterValue { Name = &lt;span class="str"&gt;"beginDate"&lt;/span&gt;, Value = vdb.ToShortDateString() },&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  08:  &lt;/span&gt;    &lt;span class="kwrd"&gt;new&lt;/span&gt; ParameterValue { Name = &lt;span class="str"&gt;"endDate"&lt;/span&gt;, Value = vde.ToShortDateString() },&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  09:  &lt;/span&gt;    &lt;span class="kwrd"&gt;new&lt;/span&gt; ParameterValue { Name = &lt;span class="str"&gt;"deviceID"&lt;/span&gt;, Value = Request.QueryString[_requestString[3].Name] },&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    &lt;span class="kwrd"&gt;new&lt;/span&gt; ParameterValue { Name = &lt;span class="str"&gt;"timeZone"&lt;/span&gt;, Value = UserTimeZoneString },&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="kwrd"&gt;new&lt;/span&gt; ParameterValue { Name = &lt;span class="str"&gt;"webServiceUrl"&lt;/span&gt;, Value = webServiceUrl }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;};&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;  &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8419253340539253913-4229964107237855831?l=timorris.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timorris.blogspot.com/feeds/4229964107237855831/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8419253340539253913&amp;postID=4229964107237855831' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8419253340539253913/posts/default/4229964107237855831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8419253340539253913/posts/default/4229964107237855831'/><link rel='alternate' type='text/html' href='http://timorris.blogspot.com/2008/10/configure-microsoft-ssrs-to-use-web.html' title='Configure Microsoft SSRS to use a Web Service as a Data Source...'/><author><name>timorris</name><uri>http://www.blogger.com/profile/02870313310786211849</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/_y2z0ldyx_fQ/SQsih8vOzII/AAAAAAAAAPY/fezDxZtAVec/s1600-R/surprise.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://i102.photobucket.com/albums/m102/tlm3229/blog%20pics/th_1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8419253340539253913.post-3481592808171696032</id><published>2008-08-14T19:25:00.010-04:00</published><updated>2008-10-28T10:40:55.186-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tyler'/><title type='text'>Tyler Eating</title><content type='html'>&lt;div style="font-family:Verdana;font-size:12px;color: rgb(223,223,191);"&gt;Here is a picture of Tyler eating Peas.  They are all over his face and he loves it!&lt;br/&gt;  If you look closely, you can see his first 2 teeth (bottom).&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left;" src="http://2.bp.blogspot.com/_y2z0ldyx_fQ/SKS_RsRpsCI/AAAAAAAAAKo/j_lQz7XzYP8/s320/PeasOnFace_Croped.JPG" alt="" id="BLOGGER_PHOTO_ID_5234518977575235618" border="0" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8419253340539253913-3481592808171696032?l=timorris.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timorris.blogspot.com/feeds/3481592808171696032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8419253340539253913&amp;postID=3481592808171696032' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8419253340539253913/posts/default/3481592808171696032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8419253340539253913/posts/default/3481592808171696032'/><link rel='alternate' type='text/html' href='http://timorris.blogspot.com/2008/08/tyler-eating.html' title='Tyler Eating'/><author><name>timorris</name><uri>http://www.blogger.com/profile/02870313310786211849</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/_y2z0ldyx_fQ/SQsih8vOzII/AAAAAAAAAPY/fezDxZtAVec/s1600-R/surprise.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_y2z0ldyx_fQ/SKS_RsRpsCI/AAAAAAAAAKo/j_lQz7XzYP8/s72-c/PeasOnFace_Croped.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8419253340539253913.post-533986400755226167</id><published>2008-02-08T14:25:00.011-05:00</published><updated>2008-10-28T10:41:08.498-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tyler'/><title type='text'>Welcome to the World!</title><content type='html'>&lt;div style="font-family:Verdana;font-size:12px;color: rgb(223,223,191);"&gt;&lt;br /&gt;Baby Tyler!&lt;br /&gt;Born 1/15/2008.&lt;br /&gt;Tyler Robert Morris&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left;" src="http://2.bp.blogspot.com/_y2z0ldyx_fQ/R6ys0IOTI8I/AAAAAAAAAA4/nEDOBsFIrz4/s320/100_4067.JPG" alt="" id="BLOGGER_PHOTO_ID_5164692884247749570" border="0" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8419253340539253913-533986400755226167?l=timorris.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timorris.blogspot.com/feeds/533986400755226167/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8419253340539253913&amp;postID=533986400755226167' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8419253340539253913/posts/default/533986400755226167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8419253340539253913/posts/default/533986400755226167'/><link rel='alternate' type='text/html' href='http://timorris.blogspot.com/2008/02/baby-tyler-born-1152008.html' title='Welcome to the World!'/><author><name>timorris</name><uri>http://www.blogger.com/profile/02870313310786211849</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://3.bp.blogspot.com/_y2z0ldyx_fQ/SQsih8vOzII/AAAAAAAAAPY/fezDxZtAVec/s1600-R/surprise.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_y2z0ldyx_fQ/R6ys0IOTI8I/AAAAAAAAAA4/nEDOBsFIrz4/s72-c/100_4067.JPG' height='72' width='72'/><thr:total>4</thr:total></entry></feed>
