<?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-7269507</id><updated>2011-04-21T19:17:24.189-07:00</updated><title type='text'>Adam Miller's Weblog</title><subtitle type='html'>dotnetcraftsman&lt;br/&gt;
.net development, design, and other thoughts</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://dotnetcraftsman.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7269507/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://dotnetcraftsman.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Adam</name><uri>http://www.blogger.com/profile/00624441064389341982</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>1</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7269507.post-108925738401959123</id><published>2004-07-07T20:09:00.000-07:00</published><updated>2004-07-08T12:36:53.983-07:00</updated><title type='text'>Dynamic SQL Engine</title><content type='html'>I finally got started on my initial Dynamic SQL Engine.  I'm going to describe how I went about creating it.  I'd like to hear any suggestions for improvements.  I started with my basic data layer that uses a factory creation pattern.  These factories generate all of the ADO.Net objects (for example the SqlProviderFactory can generate SqlCommand, SqlConnection, etc...).&lt;br /&gt;&lt;b&gt;IDataProviderFactory&lt;/b&gt;: The interface for all other factory providers.&lt;br /&gt;&lt;b&gt;OleDbProviderFactory&lt;/b&gt;: OleDb Support&lt;br /&gt;&lt;b&gt;SqlProviderFactory&lt;/b&gt;: SqlClient Support&lt;br /&gt;With that setup in place I started my DynamicSqlEngine which so far only includes 4 classes:&lt;br /&gt;&lt;b&gt;DataTableAttribute&lt;/b&gt;: This attribute defines what table a specific class may represent.&lt;br /&gt;&lt;b&gt;DataColumnAttribute&lt;/b&gt;: This attribute defines a custom attribute that will let me label properties or methods with a column name (I've only added support for properties so far).&lt;br /&gt;&lt;b&gt;IDynamicSqlObject&lt;/b&gt;: This is an interface that an object must implement to use the DynamicSqlEngine.  It is just an empty interface.  (I know I could have simply used "object" but I believe this method will make it more clear for error checking as well as to the users of the engine)&lt;br /&gt;&lt;b&gt;DynamicSqlEngine&lt;/b&gt;:  This is where all the dynamic SQL is created for any object that implements the IDynamicSqlObject interface and has properties (or soon to come methods) with the DataColumnAttribute.&lt;br /&gt;&lt;br /&gt;To show an example of how this would be used from the client side I'll create a sample class called person:&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;[DataTableAttribute(&lt;span class="str"&gt;"People"&lt;/span&gt;)] &lt;br /&gt;&lt;span class="kwrd"&gt;class&lt;/span&gt; Person : IDynamicSqlObject &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; _firstName; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; _lastName; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;public&lt;/span&gt; Person(&lt;span class="kwrd"&gt;string&lt;/span&gt; firstName, &lt;span class="kwrd"&gt;string&lt;/span&gt; lastName) &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_firstName = firstName; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_lastName = lastName; &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;[DataColumnAttribute(&lt;span class="str"&gt;"FirstName"&lt;/span&gt;)] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; FirstName &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;get { &lt;span class="kwrd"&gt;return&lt;/span&gt; (_firstName); } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set { _firstName = value; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;[DataColumnAttribute(&lt;span class="str"&gt;"LastName"&lt;/span&gt;)] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; LastName &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;get { &lt;span class="kwrd"&gt;return&lt;/span&gt; (_lastName); } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set { _lastName = value; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;}&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;After the user had created a class they could simply use my &lt;br /&gt;data access layer to insert a new person like this:&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;Person person = &lt;span class="kwrd"&gt;new&lt;/span&gt; Person(&lt;span class="str"&gt;"John"&lt;/span&gt;, &lt;span class="str"&gt;"Doe"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;SqlProviderFactory factory = &lt;span class="kwrd"&gt;new&lt;/span&gt; SqlProviderFactory();&lt;br /&gt;&amp;nbsp;&amp;nbsp;DynamicSqlEngine.Insert(factory, &lt;span class="str"&gt;"MyConnectionString"&lt;/span&gt;, person);&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;This would simply insert John Doe into the People table in your database. I will post more of my DynamicSqlEngine as it's being created if I feel like it (or if anyone is interested in seeing it).&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7269507-108925738401959123?l=dotnetcraftsman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetcraftsman.blogspot.com/feeds/108925738401959123/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7269507&amp;postID=108925738401959123' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7269507/posts/default/108925738401959123'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7269507/posts/default/108925738401959123'/><link rel='alternate' type='text/html' href='http://dotnetcraftsman.blogspot.com/2004/07/dynamic-sql-engine.html' title='Dynamic SQL Engine'/><author><name>Adam</name><uri>http://www.blogger.com/profile/00624441064389341982</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry></feed>
