The VB.NET-MySQL Tutorial – Part 7

October 30th, 2006 Leave a comment Go to comments

Introduction

In our previous article we added the final base functionality to our application, allowing for the creation and use of custom status messages. Now that we have a basic working application we can move to creating an installer for our application, allowing it to be deployed to other PCs.

There are multiple options for creating installers for a Visual Basic application, including the new one-click installer that will be included with Visual Studio.NET 2005. In this tutorial I am going to introduce you to an excellent Open Source installer called InnoSetup. InnoSetup is a script-driven installer, written in Delphi, that is very versatile and expandable. InnoSetup is free for commercial use and is available for download at www.innosetup.com.

In addition to the files generated by the Visual Basic compiler, we also need the .NET framework 2.0 installer, for those machines that do not have the appropriate version of the .NET framework installed. The .NET framework redistributable package can be downloaded here.

Building the Application

Before we can package the application into an installer, we need to build an executable. Open your project in VB.NET and choose the Clean option from the Build menu. The Clean option deletes all binary and intermediate files from the project, ensuring that the next build will not contain any old files. After the clean is completed, choose the Build option from the Build menu.

After building the project, the bin directory will contain the In-Out.exe executable. and the In-Out.exe.config configuration file. As these are the only two files in our application the installation will be relatively simple; we must install the two built files and run the .NET framework installer.

Creating an Installation Support Directory

First we need to create an installation support directory within our project directory to store the installer files and the support files. Add a \install directory with \support and \output sub-directories to your project directory.

Move the .NET framework installer (dotnetfx.exe) into the \support directory. The \output directory will contain the compiled install file.

Creating the Install Script

Now that we have built the executable. and prepared the support files, we are ready to create the application installer. The InnoSetup tool comes with a wizard interface that we will use to build the basic install profile. Download InnoSetup from www.innosetup.com and install it before proceeding.

Once you have downloaded and installed InnoSetup, start InnoSetup and you will be presented with a file dialog:

Innosetup Starting Dialog

Choose the Create a new script file using the Script Wizard option and click OK.

The next dialog is an introduction to the wizard:

InnoSetup Introduction

Make sure the Create a new empty script file option is un-checked and click Next >.

Setting the Application Information

The next dialog in the wizard is for setting some basic application information:

Application Information Dialog

Set the appropriate application information for your project and click Next > (if you are unsure about a piece of information just use a dummy value, you can change it later).

Setting the Program Directory

After setting the basic application information, we can configure the installation directory for our application:

Innosetup Directory Dialog

It is generally best to install to the Program Files directory of the target machine. Set the application directory name and click Next >.

Specifying Installation Files

The next step is to specify the files that will be included with the installer:

Innosetup File Dialog

Browse to the executable file you created in VB.NET and specify it as your application main executable file. After identifying your main executable, use the Add file(s) button to add the .config file for your executable.

After you have specified your application files, click Next >.

Creating Shortcuts and Icons

After specifying installation files we move on to creating a Start menu entry and various shortcuts to our application:

Application Icons Dialog

Select a start menu folder name (usually your application name) and choose your desired options. I like to add an Uninstall icon to the start menu entry just to make things more convenient for my users.

Once you have configured the Start menu entry, click Next >.

Specifying Install Documentation

The next screen of the wizard allows you to specify installation documentation files:

Innosetup License Dialog

Of particular interest is the License file; if you specify a license file, the user will be unable to proceed with the installation without agreeing to the contents of the license file.

In our case we do not have a license file, so leave the fields blank and click Next >.

Specifying Output Files

The final step in the InnoSetup wizard is to specify where the output files of the InnoSetup compiler will be placed:

Innosetup Output Dialog

Set the Custom compiler destination base directory to the \output subdirectory you created previously. You can change the base name of your installer if you wish, in my case I have changed the name to in-out-setup (InnoSetup will take care of the extension).

After entering your output settings, click Next >.

Finishing the InnoSetup Wizard

On the final screen of the InnoSetup wizard click the Finish button. When prompted, click the No button to skip compiling the new script. You should be presented with a setup script similar to this one:

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

[Setup]
AppName=In-Out
AppVerName=In-Out 1.0
AppPublisher=Mike Hillyer
AppPublisherURL=http://www.openwin.org
AppSupportURL=http://www.openwin.org
AppUpdatesURL=http://www.openwin.org
DefaultDirName={pf}\In-Out
DefaultGroupName=In-Out
OutputDir=C:\Documents and Settings\mhillyer\Desktop\in-out\install\output
OutputBaseFilename=in-out-setup
Compression=lzma
SolidCompression=yes

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\Documents and Settings\mhillyer\Desktop\in-out\In-Out\bin\In-Out.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Documents and Settings\mhillyer\Desktop\in-out\In-Out\bin\In-Out.exe.config"; DestDir: "{app}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{group}\In-Out"; Filename: "{app}\In-Out.exe"
Name: "{group}\{cm:UninstallProgram,In-Out}"; Filename: "{uninstallexe}"
Name: "{userdesktop}\In-Out"; Filename: "{app}\In-Out.exe"; Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\In-Out"; Filename: "{app}\In-Out.exe"; Tasks: quicklaunchicon

[Run]
Filename: "{app}\In-Out.exe"; Description: "{cm:LaunchProgram,In-Out}"; Flags: nowait postinstall skipifsilent

This script is enough to perform a basic installation of the application in a target machine. Choose the Save option of the File menu of InnoSetup and save the script in the /install directory of your project (I named mine in-out.iss). You may want to change the various file paths in the script to relative paths, just to make it easier to move your project directory around.

Adding the .NET Framework

While the installer would now successfully install our application, we need to add support for installing the .NET Framework. The dotnetfx.exe we downloaded earlier needs to be added to the installer and run as part of the installation process. This will radically increase the size of the installation (the MSI installer is 22 megabytes), but it cannot be avoided since we cannot assume that the target machine will have the .NET Framework 2.0.

Adding a File to the Install Script

We need to instruct InnoSetup to add dotnetfx.exe to the installer. We will want to have this file available during the installation as a temporary file that is deleted at the end of the installation.

Files that are part of the installation are listed in the [Files] section of the installer script. We specify a source and destination for each file, along with special flags that dictate the behavior of the file. In our case the source is support/dotnetfx.exe, the destination is a special target called {tmp} that maps to a temporary directory on the target machine:

        Source: support\dotnetfx.exe; DestDir: {tmp}; Flags: deleteafterinstall

This line ensures that the MSI installer for the .NET Framework will be available to the installer.

Executing the Installer

Now that the installer is part of the installation package, we need to add a call to the installation script to run it before the installation completes.

We can run applications during the install process by adding them to the [Run] section of the install script. We can specify parameters to pass to the application, along with a working directory and a status message to display while the application runs:

        Filename: {tmp}\dotnetfx.exe; Parameters: "/q"; WorkingDir: {tmp}; StatusMsg: Installing DotNET Framework 2.0

The parameter we are passing to dotnetfx.exe instructs it to be quiet during the installation and thus not bother the user as much.

Adding Connector/NET

The last file needed for our application is the assembly file for Connector/NET, named MySql.Data.dll. The assembly file can be found in the Connector/NET installation directory (typically C:\Program Files\MySQL\MySQL Connector NET 1.0.X).

Copy the dll file to your \Support directory and add the following line to your install script:

        Source: support\MySql.Data.dll; DestDir: {app}

This will add the dll file to your application install directory.

Compiling the Installer

Now that we have added the .NET Framework and Connector/NET to the installer, we can proceed with the install. Before we do, here is an example of what your install script may look like:

[Setup]
AppName=In-Out
AppVerName=In-Out 1.0
AppPublisher=Mike Hillyer
AppPublisherURL=http://www.openwin.org
AppSupportURL=http://www.openwin.org
AppUpdatesURL=http://www.openwin.org
DefaultDirName={pf}\In-Out
DefaultGroupName=In-Out
OutputDir=output
OutputBaseFilename=in-out-setup
Compression=lzma
SolidCompression=yes

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Files]
Source: ..\In-Out\bin\In-Out.exe; DestDir: {app}; Flags: ignoreversion
Source: ..\In-Out\bin\In-Out.exe.config; DestDir: {app}; Flags: ignoreversion
Source: support\dotnetfx.exe; DestDir: {tmp}; Flags: deleteafterinstall
Source: support\MySql.Data.dll; DestDir: {app}

[Icons]
Name: {group}\In-Out; Filename: {app}\In-Out.exe
Name: {group}\{cm:UninstallProgram,In-Out}; Filename: {uninstallexe}
Name: {userdesktop}\In-Out; Filename: {app}\In-Out.exe; Tasks: desktopicon
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\In-Out; Filename: {app}\In-Out.exe; Tasks: quicklaunchicon

[Run]
Filename: {tmp}\dotnetfx.exe; Parameters: "/q"; WorkingDir: {tmp}; StatusMsg: Installing DotNET Framework 2.0
Filename: {app}\In-Out.exe; Description: {cm:LaunchProgram,In-Out}; Flags: nowait postinstall skipifsilent

You can begin compiling the installer by choosing the Compile option from the Build menu of InnoSetup. The progress of the compile will be displayed in the bottom window of InnoSetup. Once the compile is complete we can test the installer.

Testing the Installer

To test the installer, choose the Run option from the Run menu of InnoSetup. As you work through the installer debug information will be presented in the bottom window of InnoSetup. If your installer works without error during this test, the next step will be to test the installation on a ‘clean’ machine that you have not installed your application on before and which does not have the .NET Framework installed.

If your application works properly on the clean machine you can be fairly certain that it will run properly on the target platform represented by that machine. If you expect to deploy on other versions of Windows, you may want to try installing your application on clean machines running that version of Windows.

Improving the Installer

There are some minor improvements that could be made to our installer, including the addition of support for downloading the .NET Framework files only if needed, and adding different install types such as Minimal, Full, and Custom. While these changes will not be covered in this article, the InnoSetup documentation is quite good and should help you make such changes if you so desire.

Conclusion

We now have a working installer for our application, allowing us to distribute the application to our users. The installer deploys our application, the .NET Framework, and Connector/NET, allowing the application to be deployed on any number of desktops, all with a versatile, Open Source installer that ships a single executable. for installation.

The source code for this project is available at http://www.vbmysql.com/wp-content/uploads/vb-mysql-tutorial-part-7.zip.

This will be the last regular article in this tutorial series, I hope it has proven of use to you in learning the basics of working with Visual Basic.NET and MySQL. As I continue development of the application covered in these articles, I will write individual articles covering single subjects such as the system tray, creating configuration screens, and using version control.

  1. November 7th, 2006 at 19:01 | #1

    Nice articles, thanks! really helped me!

  2. November 17th, 2006 at 07:49 | #2

    Testing out a new app… got program working just how i want it… only problem is if the end user has .net already installed they have to select either “repair” or “remove” any idea on how i could check to see if they have .net and give them the right file reguardless?

    mike

  3. Eric Csinsi
    January 2nd, 2007 at 02:13 | #3

    I can’t connect to my database. It says that it can’t connect, which is true because it’s trying to connect to my ip instead of the one I specified.

  4. James Rhodes
    February 25th, 2007 at 06:27 | #4

    The reference to the MySQL client library doesn’t work, because the reference is an absolute path (and you can’t make it relative).

  5. James Rhodes
    February 25th, 2007 at 06:45 | #5

    Nevermind. It happened to be some images that I was loading in at runtime. :)

  6. February 26th, 2007 at 01:12 | #6

    Thank you for this tutorial, it was a great series. The only thing I don’t see in this is the installation of mysql and then creating the database with tables and any data that might be in the database. Is there another tutorial here at vbmysql.com that explains how to do that. I think I can figure out how to install mysql with the InnoSetup script but the creating the database and the tables is a little to much for me at this point in my education. Any help in this would be appreciated.

    Thanks
    Jamie

  7. February 26th, 2007 at 19:19 | #7

    About the creating the database: you have to make another program that creates the databases and tables and run it before the installation ends. That’s how i am doing with the updates of the programs, but should work just fine and with the creation, or manual create them.

  8. February 26th, 2007 at 19:24 | #8

    Is there a tutorial on how to go about doing that? Are you talking about a vb.net program to do that? And do I have to run the mysql 5.0 installation first?

    Thanks for the help.
    Jamie

  9. marcelo
    March 27th, 2007 at 22:46 | #9

    Good tutorial, thnks a lot!!!!

  10. March 28th, 2007 at 13:56 | #10

    For Jamie Holcom: i don’t know if there is a tutorial about how to do that, but it can be done, and yes, with a vb.net program or directly in your program – i have done one that . here’s some code
    Dim conn1 = New MySqlConnection()
    conn1.ConnectionString = “server=localhost;” & _
    “user id=root;” & _
    “password=” & ********
    ‘”;
    ‘Try
    Dim myCommand As New MySqlCommand
    Dim mySQLstr As String
    Dim nume As String
    Dim dialog As New OpenFileDialog
    If dialog.ShowDialog = System.Windows.Forms.DialogResult.OK Then

    nume = dialog.FileName.ToString
    Dim fileContents As String
    fileContents = My.Computer.FileSystem.ReadAllText(nume)
    Try
    mySQLstr = fileContents
    conn1.Open()
    myCommand.Connection = conn1
    myCommand.CommandText = mySQLstr
    myCommand.ExecuteNonQuery()
    conn1.Close()
    MsgBox(“Baza de date a fost creata!”)
    Catch myerror As MySqlException
    MsgBox(“Eroare: ” & myerror.Message)
    Finally
    If conn1.State ConnectionState.Closed Then conn1.Close()
    End Try
    End If

    it will open a dialog to chose the sql file containing the structure
    of course it can be automated.
    ATTENTION: Do not specify the database in the connection string.

  11. March 28th, 2007 at 14:02 | #11

    I am working at an installation that installs everything – without user interaction – like instantrails (google it), it’s not such a big deal but helps deploying applications made with mysql.

  12. Andi
    June 5th, 2007 at 08:07 | #12

    great tutorial.. really help me for my projekt.. i’m working with vb.net since 2weeks and i had really problems with mysql.. thx for this

  13. July 26th, 2007 at 17:26 | #13

    I haven’t had a complete chance to read all the way through, but it seems very complete. My question is how different is it to connect to a MySQL on an external web server? I would like to build an application which needs a db, and there are constant updates. I would like to just update the db, and have the users always have the most up to date info without needing to download. So my plan is to create a VB.net 2k5 app with a MySQL on my website. Hopefully I am not dreaming.

  14. July 27th, 2007 at 18:16 | #14

    itsamemario – to use mysql remotely for updates you will need to use the root account. What you want to do it can be done ;) good luck!

  15. Tony Loop
    July 30th, 2007 at 07:06 | #15

    Thanks for the tutorial, however, one major problem is when developing the application, a certain password is used with the root account, and that is what is available in the code. So how can mysql be installed together with the custom password to the root account?

  16. Francisco
    July 30th, 2007 at 20:41 | #16

    if my aplication does have crystal reports and needs dlls that are in the common files. when developing in others pcs dont work do yo know what i must do ?

  17. August 23rd, 2007 at 09:58 | #17

    Hello all . . .

    I need some help . . .

    I have create a database in MySQL and I’m using the VB.NET 2005 to manage my data

    When i try to input or update some records in the database tables instead of Greek characters that I’m writing I’m getting back question marks (?)

    I have change the table and the column character sets and still the problem is there ? ? ?

    What can i do for that ? ? ?

    Thanks a lot . . .

  18. October 17th, 2007 at 15:48 | #18

    Awesome articles, thank you for being so comprehensive in your writing.

  19. March 14th, 2008 at 13:18 | #19

    This has been the most thorough tutorial I have ever come across.
    You have provided everything that I needed to get me started, and this last article has helped to close the loop.

    Thank you very much!

    Mike

  20. spyder
    June 18th, 2008 at 09:13 | #20

    great tutorial! thanks! hope there will be more!

  21. Mohammad
    January 13th, 2009 at 08:18 | #21

    Thank you very much, thank you, thank you, thank you for putting time and effort in this brilliant hands on real world tutorial.
    I will go develop some applications now :)

  22. Roberto
    February 8th, 2009 at 00:09 | #22

    Hello, Mike

    This is just to add my congratulation for this great tutorial.
    Despite I have purchased many books only now I can understand how VS + MySQL work together.

    I don´t know how many thanks should be wrote on the end of this message. There is no space enough here.

  23. May 2nd, 2009 at 00:57 | #23

    hello!!!! thank you very much for a very wonderful tutorial.. I will recommend this to all my friends who are interested in learning VB.Net and MySQL.

  24. Mark Bunds
    May 11th, 2009 at 21:13 | #24

    Question about structure and joins:

    I am attempting to create a database for storing data logger files. The files contain extremely redundant information in most of the fields I am parsing out of .csv lines; TAGNAME, DATE, TIME, Milliseconds, and PV (the actual process data).

    I created 7 tables to handle the relational aspects: (all ID fields are medium int, 8 digits, auto incremented in the primary tables, not in the join tables

    Primary Table 1 : TAG, containing fields TagName and TagID, TagID is the primary key, auto incremented and indexed…

    Join Table : Tag_Date, containing fields TagID and DateID, TagID and DateID are both primary keys, not auto incremented, but indexed…

    Primary Table 2 : DATE, containing fields DateStamp and DateID, DateID is the primary key, auto incremented and indexed…

    Join Table : Date_Time containing fields DateID and TimeID, DateID and TimeID are both primary keys, not auto incremented, but indexed…

    Primary Table 3 : TIME containing fields TimeStamp and TimeID, TimeID is the primary key, auto incremented and indexed…

    Join Table : Time_Event containing fields TimeID and EventID, TimeID and EventID are both primary keys, not auto incremented, but indexed…

    Primary Table 4 : EVENT containing fields Ms (milliseconds), PV, and EventID, EventID is the primary key, auto incremented and indexed, Ms and PV are both indexed…

    The TagName, DateStamp, and TimeStamp data repeat many thousand rows, which is why I am attempting to reduce the total size of the data sets (the raw .csv can have upwards of 2.6 million rows)

    I wrote a routine that basically:

    1: See if TagName already exists in TAG; if yes, get TagID, if no, write record, retrieve record, get TagID (auto increment)
    2: See if DateStamp already exists in DATE; if yes, get DateID, if no, write record, retrieve record, get DateID (auto increment)
    3: See if TimeStamp already exists in TIME; if yes, get TimeID, if no, write record, retrieve record, get TimeID (auto increment)
    4: See if Ms and PV already exists in Event; if yes, get EventID, if no, write record, retrieve record, get EventID (auto increment)
    5: See if values stored for TagID and DateID already exist in join table Tag_Date, if yes, move on, if no, write values stored for TagID and DateID
    6: See if values stored for DateID and TimeID already exist in join table Date_Time, if yes, move on, if no, write values stored for DateID and TimeID
    7: See if values stored for TimeID and EventID already exist in join table Date_Time, if yes, move on, if no, write values stored for TimeID and EventID

    Step 4 above is probably not necessary since very few EVENT records will contain duplicate data across fields Ms and PV, but since some actually do, I figured that I might as well eliminate those duplicates as well.

    Unless I missed something, this structure should connect any valid Ms/PV to the chain of field rows pointed to by each join table, the one with the largest number of ~unique records being EVENT, using INNER joins between:

    Primary Table : TAG.TagID
    Join Table : [TAG_DATE.TagID--TAG_DATE.DateID]
    Primary Table :D ATE.DateID
    Join Table :[DATE_TIME.DateID--DATE_TIME.TimeID]
    Primary Table :TIME.TimeID
    Join Table :[TIME_EVENT.TimeID--TIME_EVENT.EventID]
    Primary Table :EVENT.EventID

    So, the parser successfully stores records pared down to one instance of each recored for TagName, Date, and Time, and very few duplicates in Ms/PV.

    MySQL stored a test file parsed from a .csv having 450,000+ lines in just under 15 minutes, but I have been having trouble making MySQL retrieve a record set containing ~10,000 rows in less than an hour using a query that selects my TagName, DateStamp, TimeStamp, Ms, and PV from their tables using inner joins except for the EVENT table, which uses a Left Outer join (I’ve tried it with an inner join as well), where TagName = and DateStamp = ordered by TimeStamp and Ms.

    I have made some fundamental errors in either my structure, indices, or query, or I have created too complex a structure for my intended purpose. (or I just don’t understand SQL well enough to tackle this sort of project)

    Do you see any better way to accomplish fast queries with the data I need to extract?

    Ideally, I could perform a query asking for record sets based on:

    1: Date
    2: Time Range
    3: Tag Name

    Sort the result set by TimeStamp and Milliseconds (Ms), and then quickly read these out to a charting routine. I assumed that a database engine would be the way to go since it could handle the selection and sorting, saving me from writing the routines myself in another programming langiuage.

  25. Mark Bunds
    May 11th, 2009 at 21:16 | #25

    Looks like my post stripped out some characters I included for illustration…

  26. Jeanette
    May 29th, 2009 at 02:29 | #26

    Hello. Is the mysql database included in the installer?

    Thanks.

  27. September 20th, 2009 at 22:41 | #27

    Недвижимость Швейцария . Продажа недвижимости в Швейцарии: участки под застройку, шале, апартаменты , аренда недвижимости в Швейцарии
    инвестиции, получение вида на жительство в Швейцарии. Создание компании в кантоне Вале . swissinvest.su

  28. October 25th, 2009 at 05:12 | #28

    thanks for this great tutorial :)

    i would like to ask if there is a way to bundle mysql server in the installer. thanks for reading my query :)

  29. braune
    November 27th, 2009 at 07:39 | #29

    Thank you, this has been the best tutorial I have ever gone through. If, after going through these tutorials, you can’t get VB and MySQL working together maybe you need to look at another career choice.
    Thanks so much.

  30. KK
    January 30th, 2010 at 06:10 | #30

    I don’t know whether the author is still reading all these comments, but I have no other choices, I couldn’t find any help from google, some I choose to ask my question here. This is a great tutorial, however, how do I detect whether the target machine already have mysql installed and if the target machine doesn’t have mysql install, how do I install it automatically? Hope that you will be able to help me on this, thank you.

  31. rahul
    February 16th, 2010 at 12:59 | #31

    i want to know how to add mysql server 4.0 with the installer package and the database script file with the installer
    that will be install at the time of the installation and the script of the database is automatically install at the time of the installation

  32. Lindel
    March 22nd, 2010 at 18:27 | #32

    How to run an install program without copy this installer to temp, because the size of installer is 300 mb. Any help?

  33. dancorave
    March 31st, 2010 at 11:01 | #33

    thanks alot for these articles.

    i’ve read them all in one time, i couldn’t stop reading.

    working on some programs of myself now.

  34. May 17th, 2010 at 00:04 | #34

    Hi there!

    Dude, you’re such an Ace on these things!

    I rode all the VBMySQL tuto, and it’s amazing. Everything is clear now for me.

    But I have a problem with a project:

    How can I insert and update data from MySQL Tables from a VB2008 Interface? I have the proper connector for the current version of MySQL. I have a group of TextBoxes, and the main idea is, when the user types the information required, and click the button “Save”, the data typed in the TextBoxes, should be saved in the proper tables. I’ve done the MySQL query in Navicat and MySQL Maestro (very good DB developing tools) and it’s correct, but I can’t do the saving data thing.

    Can you help me, please? If you need code, I can send it to you.

    Thank you very much and congratulations for this webpage, is very usefull!

    Regards from Mexico City!

  35. Urbycoz
    August 16th, 2010 at 10:29 | #35

    A fantastic tutorial. I wish there were more.

    It would be great if there was an explanation as to how to use innodb to install an instance of mysql, create a database and populate it.

  36. September 3rd, 2010 at 09:36 | #36

    I have made this tutorial and is working.
    Errors:
    1. when i try to add a custom message and i hit update i get the following error: Parameter ‘?UserID’ has already been defined. how to resolve that?
    2. in my version in the cboMessage is have two times the message “No Message” why? how can i modify not to show “No Message”?

    Please help me.
    This is what i made: http://www.filefactory.com/file/b32hhcg/n/MySql.rar

  37. September 7th, 2010 at 14:10 | #37

    Many thanks for this very excellent tutorial. I’ve got a little problem running my programm under Windows 7: It seems, that under Windows 7 the file ‘MySql.Data.dll’ in my installation-directory cannot be found during execution-time: a File-Not-Found Exception occurrs. Any helpful suggestions are very appreciated. Thanks in advance

  38. December 17th, 2010 at 03:21 | #38

    Nice post.Thank you for taking the time to publish this information very useful!

  1. No trackbacks yet.