When we want to create database applications, we must interact repeatedly with a database. At the code level, for each interaction with the database, we must create a connection, define the command that will be executed and finally get any results. Quite often the database access code is troublesome and it's not optimized for high performance database applications. For best results in terms of creating database applications in less time and with higher performance, the best practice is to separate the Data Access Layer from our main application code. Database Helper serves exactly that purpose and helps produce database applications easier and faster.
About Database Helper
Database Helper is an open source application that helps programming and interacting with a database. It has three useful tools which will be described in the following sections
- Generate Stored Procedures Code in Database Level
- Generate .NET (VB and C#) Single Class and Collection Class for each table in database (BLL)
- Generate .NET (VB and C#) Code for Stored Procedures and some other useful methods (DAL)
Generate Stored Procedures Code in Database
This tool, creates 5 stored procedures for each table including
Delete. I want to thank Mr. Keramati for writing this tool and giving me the source code to merge with my other tools. His original version generated 5 procedures for a selected table, but I customized it to generate the 5 stored procedures for all of tables in database. Mr. Keramati has also published his source code on CodePlex seperately.
The output of this tool is a folder named Sql containing a single file with .sql extension with all of the stored procedures generated for all tables in database.
Generate .NET Classes (Business Logic Layer)
This tool, creates two classes for each table. The first class helps you write your code more strongly-typed, while the second class is a
Collection class (for first class) inherited from the
CollectionBase class to hold data rows in memory like
DataTable. This permits working with many rows in a strongly-typed manner and you can even bind a
DataGridView.DataSource to this object. The classes may be generated in either C# or VB.NET language in a
namespace that has same name as the database.
The output of this tool is a folder named BLL that contains a .NET source file including all the classes that were generated from tables in the database.
Generate .NET Code for Stored Procedures (Data Access Layer)
This tool extracts all stored procedures from the database and creates a method for each one including method parameters, if any. In other words, it will create the Data Access Layer for you.
All generated methods return a
DataTable object, if
DataTable.Rows > 0, otherwise, the returned
DataTable object does not have any valid rows.
It also generates the following additional methods for easier interaction with the database.
- First overload of the constructor that takes the full connection string as a parameter. You can access the connection string via the
- Second overload of the constructor that takes two parameters,
DataBaseName, and creates a
Trusted Connection. You can access the connection string via the
- Third overload of the constructor that takes
Password as parameters and creates an
Untrusted Connection. You can access the connection string via the
GetData(): This method takes a
SqlCommand as a parameter and returns the query result as
DataTable object. Note: you don't need to pass a connection to the constructor of
SqlCommand object. It will be initialized inside the
ExecNonQuery(): This method executes a non-query SQL command and like
GetData(), takes a
SqlCommand as a parameter. It then return an
int as result.
The output of this tool is a .NET source file named
DAL, containing a class named
DAL in the
How Database Helper Works
Database Helper is very easy to use following these steps:
- Enter the Data Source in the corresponding ComboBox.
- Click the
Connect button to load all databases on your server (this takes a few minutes). After loading databases, each database node has two sub nodes:
Stored Procedures and
- Select which database that you want to generate code for (or each sub node of specified detabase).
- In the output section, select an option. If you want to generate T-SQL code for stored procedures at the database level, then select
Generate Stored Procedures radio button. If you want to generate .NET code for existing stored procedures and create the data access layer, then select
Generate Code for Stored Procedures (DAL) radio button and select a language for code generation.
- If you want to generate .NET class code for the tables, select
Generate Tables Classes (BLL) check box (optional) and select a language for code generation.
- Select output path for result.
- Click the
Generate Code button. Database Helper will generate the output results in specified directory. If your output is .NET code, then you must add it to your project along with a
How to Work with the Sample Project
Download the sample file attached to this article and open zip file. If you run TestDb_Script.sql in your Sql Server Management Studio (SSMS), it will create a sample database named
TestDB that contains a table named
Student and some records to work with.
DbHelper from the debug folder, initialize the connection options (DataSource, User, Password, etc.) and then click
Connect. All of the databases on the current DataSource will be loaded. Select the
TestDb database that we created earlier.
Because this database does not have any stored procedures, in the output, select
Generate Stored Procedures, select the directory path (language is not important in this mode), then click
Generate Code. Open the file that is created (for example, Your Path\Sql\TestDB_Sps.Sql) with SSMS and run it in your TestDb database.
DbHelper again (or click
Connect again if you didn't close it) and again select the
In the output, select
Generate Code for Stored Procedures (DAL), and check
Generate Tables Classes (BLL). Select a language and path, then click
Generate Code. A class sourceFile named DAL.cs or DAL.vb will be created which includes the code for the stored procedures and Data Access Layer along with a folder named BLL which contains
TestDb.vb that includes all the classes code for the tables. You must add these files and a
using directive to your solution.
New Functionality in Database Helper v 2.0.0 (Plugins)
This version of Database Helper has a small SDK to extend its funtionality. PlugIns are *.dll files and exist in the PlugIns folder, for example PlugIns\SamplePlugInforDbHelper.dll. When the program is started, it reads the available plugins in the PlugIns folder and adds them to the
PlugIns menu automatically. When the user selects a
PlugIn from the
PlugIns menu, the plugin executes.
To create a new plugin for Database Helper, follow these steps:
- Create a new
Class Library project.
- Add reference to DatabaseHelperSdk.dll.
- Create a new class that implements the
IPlugIn interface (this interface is in the
- Implement the three methods defined in the
- InitializeComponent: This method is the main method that initializes the plugIn and adds it to the
- Author: This method contains information about the plugin's author.
- Description: This method contains a description of the plugin.
- Create a
Click event for your plugin menu in the
InitializeComponent method and implement its event handler method to execute the plugin code when selected.
- Compile your project and save the created assembly (with .dll extension) in the Database Helper\PlugIns folder. Now when Database Helper starts, you should see your plugin in the
For more information to know how to create plugins, please download the SamplePlugin project from the URL at the top of this article.
Database Helper was written in C# 2.0 and the source code is available from the URL above. To generate .NET code, I used the
System.CodeDom.Compiler namespaces. For loading database information, I used the SQLDMO.dll library. This library is quite good, but takes a long time to load the database info.
In Version 2.0.0 I used Smo (Sql Server Management Objects) instead of Dmo (Distributed Management Objects) to work with Sql Server (2005) easier and use full multi-threading (thanks to
Anonymous Delegates). The database info loading algorithm was optimized, which made loading the database information about 10 times faster.
The new release of Database Helper Version 2.0 has some important changes as follow:
- Use of
SMO (Sql Server Management Objects) instead of
DMO (Distributed Management Objects) to load database information.
- Changed the algorithm for loading database information to full multi-threading, improving the speed about 10 times faster.
Insert stored procedure to use all types, including characters, integers, and unique identifiers. In version 1.0.0, it only with integers.
Insert method in .NET code to return the inserted record using the
- Added plugin support and created SDK for it to facilitate third party development. The sample plugin application can be downloaded from the URL at the top of this article)
Thank you for reading my article, I hope enjoy it. If you encounter any problems for any problems or have any questions please email me at: firstname.lastname@example.org.