Codoxide.Common Library Version 0.0.1 (Concept Phase): Database Wrapper, Basic Design Patterns, Configuration Handlers
Today I'm so excited to announce the first release of the Codoxide.Common Library. I haven't been over ambitious about the version numbering as I want you to treat this library to still be in concept stage.
Unfortunately, this release had taken longer than expected cos of my newly cramped up schedule. Worst part of that is I'm posting this code without proper documentation (yep, excuses!). Nevertheless, there's plenty of code in here to prove useful to many. So here goes!
Updating the Database Wrapper for C#
I have made a few updates for my Generic Database Wrapper class. The update contains a bug fix along with several additional methods for supporting DbParameters.
The new source file can be downloaded here. I have also updated the file linked to the original post.
My Favorite Database Wrapper for C#
As a guy who started programming back in the days of DAO, I have nothing but love for ADO.NET. But let's face it, you can still end up writing pretty lousy code with it. Not everybody's fully aware of the best uses of the ADO.NET. One of the most common problems I keep stumbling onto in other peoples code is the poor use of ADO.NET Connection Pooling feature.
Somewhere, down the line Microsoft probably started noticing that their cool new data access model wasn't being fully utilized. The birth of the Microsoft Enterprise Library was probably due to this.
As cool as the Enterprise Library is, I've found it to be an over kill for most of my projects. In fact one of my favorite projects featured on CodeProject, was because Enterprise Library's Offline Application Block was so clunky (and very limited).
Around the same time that I worked on on the SCOAB (Smart Client Offline Application Block), I also wrote a ADO.NET wrapper similar to the Enterprise Library. It pretty much follows the public interface of the Enterprise Library, but it's a very tiny wrapper compared to the enormous DAAB (Data Access Application Block).
You can download the .cs file here: AbstractDatabase.zip (1.88 kb)
This contains a generic abstract base class called AbstractDatabase. You can extend this class to use it with any type of relational database type. If you take a look at my SQLite Membership Provider, you'll find this class derived to be used with SQLite ADO.NET Wrapper. I have simply called that class Database, and it's code looks something like this:
public class Database : AbstractDatabase<SQLiteConnection, SQLiteCommand, SQLiteDataAdapter>
{
protected override string GetConnectionString()
{
return string.Format(ConfigurationManager.ConnectionStrings["BlogEngine"].ConnectionString,
HttpContext.Current.Server.MapPath("~/App_Data"));
}
}
As you see, the only member you need to override is the GetConnectionString() method. This brings up the question as to why I made this abstract. Why not read the connection string value from the web.config? Well, I've done this because I use this class on both web and desktop projects. And in some cases, especially with WinForms applications, the database is SQLite and resides in the application directory. When that happens, I can always hard code the database file name.
Here's a example of the the Database class's usage (taken from the SQLiteBlogProvier class).
using (Database db = new Database())
using (DbTransaction txn = db.BeginTransaction())
{
// SQLite doesn't support TRUNCATE
DbCommand cmd = db.GetSqlStringCommand("DELETE FROM be_Settings");
db.ExecuteNonQuery(cmd, txn);
cmd = db.GetSqlStringCommand(
"INSERT INTO be_Settings (SettingName, SettingValue) VALUES (@name, @value)");
db.AddInParameter(cmd, "@name", DbType.String, "");
db.AddInParameter(cmd, "@value", DbType.String, "");
foreach (string key in settings.Keys)
{
cmd.Parameters[0].Value = key;
cmd.Parameters[1].Value = settings[key];
cmd.ExecuteNonQuery();
}
txn.Commit();
}
A quick rundown of the public interface of AbstractDatabase class:
void AddInParameter(System.Data.Common.DbCommand, string, System.Data.DbType, object)
void AddInParameter(System.Data.Common.DbCommand, string, System.Data.DbType, int, object)
DbTransaction BeginTransaction()
void Dispose()
DataSet ExecuteDataSet(System.Data.Common.DbCommand)
int ExecuteNonQuery(System.Data.Common.DbCommand)
ExecuteNonQuery(System.Data.Common.DbCommand, System.Data.Common.DbTransaction)
DbReader ExecuteReader(System.Data.Common.DbCommand)
ExecuteReader(System.Data.Common.DbCommand, System.Data.CommandBehavior)
T ExecuteScalar<T>(System.Data.Common.DbCommand, T)
abstract string GetConnectionString()
DbCommand GetSqlStringCommand(string)
DbCommand GetSqlStringCommand(string, params object[])
DbCommand GetStoredProcedureCommand(string)
Connection { get; }
Update (June 20, 2008): I have updated this class with a minor bug fix and have added support for other parmeter types including Output and InputOuput parameters (Thanks Yordan).
Update (Oct 20, 2008): This wrapper has been updated and made a part of the Codoxide Common Library
BlogEngine.NET 1.2 SQLite Edition v0.1
Click here to download the project (2.9 MB ZIP file).
Files that were harmed during the makings of BlogEngine.NET 1.2 SQLite Edition
:
Moved
- Moved TinyMCE out of Admin folder (which has restircted accesses) to a new Common folder. This was done to fix the problem of simlies being hidden from non-member users.
Added/Deleted
- None
Modified
- Take a look at this comprehensive folder comparison report (2.8 MB compressed folder containing folder comparison report in HTML format).
The above files are hosted on my SkyDrive.
Next Up:
There are few configuration steps that you'd need to go through before using BE.NET with SQLite. Hopefully, I'd be able to explain them in my next post. I seem to have messed up the live preview for comments.
I'd have to check that out now.
Dark VS 2005 IDE Settings

I've been meaning to share this for weeks now. I made some changes to the original Midtones V1 VS IDE settings to make it more Web Developer friendly. The original developer might have concentrated more on Windows development environment as I found the amount of customization in the HTML and XML schemes a bit lacking. So, I made these modifications: minor changes, nothing to take much credit for on my part.
Download this settings file (59.29 kb) [Updated June 15, 2008]
You are going to need the Consolas Font Pack from Microsoft if you are not runing Vista.








