TechRepublic's free .NET newsletter, delivered each Wednesday, contains useful tips and coding examples on topics such as Web services, ASP.NET, ADO.NET, and Visual Studio .NET. Automatically sign up today!
In last week's column, I introduced the concept of utilizing MySQL as a backend for a .NET application. The MySQL connector and examples will get you up and running, but I'm going to take it a step further this week with extended examples of working with MySQL data via .NET.
MySQL is an accepted player
While many larger companies recognize MySQL's power, it is also a valid choice for smaller organizations. Database systems like SQL Server are often overkill for a small company or Web application. Also, many hosting companies offer MySQL database functionality for applications hosted in their environment. MySQL database connectors exist for the majority of programming languages used today. This includes Perl, PHP, Python, Java, .NET, and so forth. With this in mind, I'll take a closer look at more detailed examples of combining the power of MySQL with .NET. I'll begin by creating a sample database.
The MySQL backend
For this example, I'll create a sample database called techrepublic. It consists of a table called Person with the following columns/fields: firstName, lastName, address, address2, city, state, zip, country, and id. The id is numeric value while all the other fields are text. The following SQL is used to set up the database:
create database techrepublic;
Listing A contains the SQL that creates the person table. (Note: The SQL language and MySQL database administration are beyond the scope of this article, but one excellent resource I recommend is O'Reilly's Managing & Using MySQL, 2nd Edition by George Reese, Randy Jay Yarger, and Tim King.
With the table created, we can populate it with sample data using the SQL in Listing B. You can execute the previous SQL multiple times to insert multiple rows into the sample database (of course, you should use different values).
Now that we have our sample database let's dig into the code. With the MySQL database set up, we can turn to .NET to connect and utilize the data source.
Connecting to MySQL
An instance of the MySqlConnection class is instantiated with a connection string. It tells the code where to find the MySQL server as well as other options. Listing C contains the connection string used to access the sample database.
This connection string accesses a MySQL server named MySQLTestServer using the supplied user id and password. A connection is made to the techrepublic database. With the connection string established, the MySqlConnection object's Open method may be called to open the connection. With the connection open, commands may be sent to work with MySQL. The example in Listing D displays all data from the Person table in an ASP.NET DataGrid.
Issues with MySQL
While MySQL is an excellent database platform, many organizations and developers shy away from it. One major issue is the perceived lack of support. Many companies are comforted by the support agreements available when utilizing other database platforms like SQL Server or DB2, but the MySQL community is enormous. Help is often just a few keystrokes away on the Internet (via a Google search). Also, MySQL AB offers support contracts as well as commercial versions of the MySQL platform.
Scalability is another concern, but MySQL has proved itself in some of the most volatile environments, including Google.
Another issue developers often cite for dismissing MySQL is its lack of support for stored procedures. A stored procedure is a set of SQL statements that are stored under a procedure name so that the statements can be executed as a group by the database server. This is an issue that always bothered me, but stored procedure support is being added to the platform with the next version (5.x).
Putting it all together
The next example demonstrates all aspects of interacting with MySQL. An ASP.NET DataGrid control is populated with data from the people table. The user is allowed to edit or delete the data as well as add new persons to the table. New data is added via TextBox controls located below the DataGrid with a button performing the actual insert of data into the table.
The GetData method handles the loading of data into the DataGrid. It resembles the code previously used with a couple of additions. Two ASP.NET session variables are used to track the column used to sort the data (the id field is used by default) and another variable holds the sort order. These values are altered when a user selects a column header to sort data based upon a column.
Additional methods are used to handle updating data as well as deleting, sorting, and adding rows. Here is a rundown of these methods:
- btnAddRow_Click: Triggered when the user selects the 'Add Person' button. The data from the TextBoxes is used to add a row to the underlying people table.
- dgResults_Cancel: Triggered when a user selects the Cancel link within an individual DataGrid row while in edit mode. This negates the current action and reloads the data.
- dgResults_Delete: The currently selected row is deleted from the person table. It is triggered when the user selects the Delete link within a row.
- dgResults_Sort: Triggered when a user selects a column header to sort the data based upon that column. The session variables are set accordingly.
- dgResults_Update: The selected row's contents are permanently saved to the database. It is triggered when the user selects the Update button while in edit mode.
Listing E contains the complete ASP.NET source.
A great platform with an attractive price
The widespread adoption of MySQL and its overwhelming support within the open source community make it an attractive option. The availability of a .NET connector for MySQL data sources extends its power to a whole new group of developers, including open source developers active within the Mono project. You can use the .NET Framework to work with all aspects of your MySQL data.
Tony Patton has worn many hats over his 15+ years in the IT industry while witnessing many technologies come and go. He currently focuses on .NET and Web Development while trying to grasp the many facets of supporting such technologies in a production environment on a daily basis.