|
|
- Info
Chapter 20. Connectors and APIs
shell> gunzip mysql-connector-odbc-3.51.11-i686-pc-linux.tar.gz
shell> tar xvf mysql-connector-odbc-3.51.11-i686-pc-linux.tar
shell> cd mysql-connector-odbc-3.51.11-i686-pc-linux
Read the installation instructions in the
INSTALL file and execute these commands.
Then proceed on to
Section 20.1.4.5, “Configuring a Connector/ODBC DSN on Unix”, to
configure the DSN for Connector/ODBC. For more information,
refer to the INSTALL file that comes with
your distribution.
20.1.3.2.2. Installing Connector/ODBC from an RPM Distribution
To install or upgrade Connector/ODBC from an RPM distribution
on Linux, simply download the RPM distribution of the latest
version of Connector/ODBC and follow the instructions below.
Use su root to become
root, then install the RPM file.
If you are installing for the first time:
shell> su root
shell> rpm -ivh mysql-connector-odbc-3.51.12.i386.rpm
If the driver exists, upgrade it like this:
shell> su root
shell> rpm -Uvh mysql-connector-odbc-3.51.12.i386.rpm
If there is any dependency error for MySQL client library,
libmysqlclient, simply ignore it by
supplying the --nodeps option, and then make
sure the MySQL client shared library is in the path or set
through LD_LIBRARY_PATH.
This installs the driver libraries and related documents to
/usr/local/lib and
/usr/share/doc/MyODBC, respectively.
Proceed onto
Section 20.1.4.5, “Configuring a Connector/ODBC DSN on Unix”.
To uninstall the driver,
become root and execute an
rpm command:
shell> su root
shell> rpm -e mysql-connector-odbc 20.1.3.3. Installing Connector/ODBC from a Binary Distribution on Mac OS X
Mac OS X is based on the FreeBSD operating system, and you can
normally use the MySQL network port for connecting to MySQL
servers on other hosts. Installing the Connector/ODBC driver
enables you to connect to MySQL databases on any platform
through the ODBC interface. You should only need to install the
Connector/ODBC driver when your application requires an ODBC
interface. Applications that require or can use ODBC (and
therefore the Connector/ODBC driver) include ColdFusion,
Filemaker Pro, 4th Dimension and many other applications.
Mac OS X includes its own ODBC manager, based on the
iODBC manager. Mac OS X includes an
administration tool that provides easier administration of ODBC
drivers and configuration, updating the underlying
iODBC configuration files.
The method for installing Connector/ODBC on Mac OS X depends on
the version on Connector/ODBC you are using. For Connector/ODBC
3.51.14 and later, the package is provided as a compressed tar
archive that you must manually install. For Connector/ODBC
3.51.13 and earlier the software was provided on a compressed
disk image (.dmg) file and included an
installer.
In either case, the driver is designed to work with the iODBC
driver manager included with Mac OS X.
To install Connector/ODBC 3.51.14 and later:
Download the installation file. Note that versions are
available for both PowerPC and Intel platforms.
Extract the archive:
shell> tar zxf mysql-connector-odbc-3.51.16-osx10.4-x86-32bit.tar.gz
The directory created will contain two subdirectories,
lib and bin. You
need to copy these to a suitable location such as
/usr/local:
shell> cp bin/* /usr/local/bin
shell> cp lib/* /usr/local/lib
Finally, you must register the driver with iODBC using the
myodbc3i tool you just installed:
shell> myodbc3i -a -d -t"MySQL ODBC 3.51 Driver;Driver=/usr/local/lib/libmyodbc3.so;Setup=/usr/local/lib/libmyodbc3S.so"
You can verify the installed drivers either by using the ODBC
Administrator application or the myodbc3i
utility:
shell> myodbc3i -q -d
To install Connector/ODBC 3.51.13 and earlier, follow these
steps:
Download the file to your computer and double-click on the
downloaded image file.
Within the disk image you will find an installer package
(with the .pkg extension). Double click
on this file to start the Mac OS X installer.
You will be presented with the installer welcome message.
Click the Continue button to begin
the installation process.
Please take the time to read the Important Information as it
contains guidance on how to complete the installation
process. Once you have read the notice and collected the
necessary information, click
Continue.
Connector/ODBC drivers are made available under the GNU
General Public License. Please read the license if you are
not familiar with it before continuing installation. Click
Continue to approve the license (you
will be asked to confirm that decision) and continue the
installation.
Choose a location to install the Connector/ODBC drivers and
the ODBC Administrator application. You must install the
files onto a drive with an operating system and you may be
limited in the choices available. Select the drive you want
to use, and then click Continue.
The installer will automatically select the files that need
to be installed on your machine. Click
Install to continue. The installer
will copy the necessary files to your machine. A progress
bar will be shown indicating the installation progress.
When installation has been completed you will get a window
like the one shown below. Click Close
to close and quit the installer.
20.1.3.4. Installing Connector/ODBC from a Source Distribution on Windows
You should only need to install Connector/ODBC from source on
Windows if you want to change or modify the source or
installation. If you are unsure whether to install from source,
please use the binary installation detailed in
Section 20.1.3.1, “Installing Connector/ODBC from a Binary Distribution on Windows”.
Installing Connector/ODBC from source on Windows requires a
number of different tools and packages:
MDAC, Microsoft Data Access SDK from
http://support.microsoft.com/kb/110093.
Suitable C compiler, such as Microsoft Visual C++ or the C
compiler included with Microsoft Visual Studio.
Compatible make tool. Microsoft's
nmake is used in the examples in this
section.
MySQL client libraries and include files from MySQL 4.0.0 or
higher. (Preferably MySQL 4.0.16 or higher). This is
required because Connector/ODBC uses new calls and
structures that exist only starting from this version of the
library. To get the client libraries and include files,
visit http://dev.mysql.com/downloads/.
20.1.3.4.1. Building Connector/ODBC 3.51
Connector/ODBC source distributions include
Makefiles that require the
nmake or other make
utility. In the distribution, you can find
Makefile for building the release version
and Makefile_debug for building debugging
versions of the driver libraries and DLLs.
To build the driver, use this procedure:
Download and extract the sources to a folder, then change
directory into that folder. The following command assumes
the folder is named myodbc3-src:
C:\> cd myodbc3-src
Edit Makefile to specify the correct
path for the MySQL client libraries and header files. Then
use the following commands to build and install the
release version:
C:\> nmake -f Makefile
C:\> nmake -f Makefile install
nmake -f Makefile builds the release
version of the driver and places the binaries in
subdirectory called Release.
nmake -f Makefile install installs
(copies) the driver DLLs and libraries
(myodbc3.dll,
myodbc3.lib) to your system
directory.
To build the debug version, use
Makefile_Debug rather than
Makefile, as shown below:
C:\> nmake -f Makefile_debug
C:\> nmake -f Makefile_debug install
You can clean and rebuild the driver by using:
C:\> nmake -f Makefile clean
C:\> nmake -f Makefile install
Note
Make sure to specify the correct MySQL client libraries
and header files path in the Makefiles (set the
MYSQL_LIB_PATH and
MYSQL_INCLUDE_PATH variables). The
default header file path is assumed to be
C:\mysql\include. The default
library path is assumed to be
C:\mysql\lib\opt for release DLLs
and C:\mysql\lib\debug for debug
versions.
For the complete usage of nmake,
visit
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vcce4/html/evgrfRunningNMAKE.asp.
If you are using the Subversion tree for compiling, all
Windows-specific Makefiles are
named as Win_Makefile*.
After the driver libraries are copied/installed to the system
directory, you can test whether the libraries are properly
built by using the samples provided in the
samples subdirectory:
C:\> cd samples
C:\> nmake -f Makefile all
20.1.3.5. Installing Connector/ODBC from a Source Distribution on Unix
You need the following tools to build MySQL from source on Unix:
A working ANSI C++ compiler. gcc 2.95.2
or later, SGI C++, and SunPro C++ are some of the compilers
that are known to work.
A good make program. GNU
make is always recommended and is
sometimes required.
MySQL client libraries and include files from MySQL 4.0.0 or
higher. (Preferably MySQL 4.0.16 or higher). This is
required because Connector/ODBC uses new calls and
structures that exist only starting from this version of the
library. To get the client libraries and include files,
visit http://dev.mysql.com/downloads/.
If you have built your own MySQL server and/or client
libraries from source then you must have used the
--enable-thread-safe-client
option to configure when the libraries
were built.
You should also ensure that the
libmysqlclient library were built and
installed as a shared library.
A compatible ODBC manager must be installed. Connector/ODBC
is known to work with the iODBC and
unixODBC managers. See
Section 20.1.2.2.2, “ODBC Driver Managers”, for more
information.
If you are using a character set that isn't compiled into
the MySQL client library then you need to install the MySQL
character definitions from the charsets
directory into SHAREDIR (by
default,
/usr/local/mysql/share/mysql/charsets).
These should be in place if you have installed the MySQL
server on the same machine. See Section 9.1, “Character Set Support”,
for more information on character set support.
Once you have all the required files, unpack the source files to
a separate directory, you then have to run
configure and build the library using
make.
20.1.3.5.1. Typical configure Options
The configure script gives you a great deal
of control over how you configure your Connector/ODBC build.
Typically you do this using options on the
configure command line. You can also affect
configure using certain environment
variables. For a list of options and environment variables
supported by configure, run this command:
shell> ./configure --help
Some of the more commonly used configure
options are described here:
To compile Connector/ODBC, you need to supply the MySQL
client include and library files path using the
--with-mysql-path=DIR
option, where DIR is the
directory where MySQL is installed.
MySQL compile options can be determined by running
DIR/bin/mysql_config.
Supply the standard header and library files path for your
ODBC Driver Manager (iODBC or
unixODBC).
If you are using iODBC and
iODBC is not installed in its
default location (/usr/local),
you might have to use the
--with-iodbc=DIR
option, where DIR is the
directory where iODBC is installed.
If the iODBC headers do not reside
in
DIR/include,
you can use the
--with-iodbc-includes=INCDIR
option to specify their location.
The applies to libraries. If they are not in
DIR/lib,
you can use the
--with-iodbc-libs=LIBDIR
option.
If you are using unixODBC, use the
--with-unixODBC=DIR
option (case sensitive) to make
configure look for
unixODBC instead of
iODBC by default,
DIR is the directory where
unixODBC is installed.
If the unixODBC headers and
libraries aren't located in
DIR/include
and
DIR/lib,
use the
--with-unixODBC-includes=INCDIR
and
--with-unixODBC-libs=LIBDIR
options.
You might want to specify an installation prefix other
than /usr/local. For example, to
install the Connector/ODBC drivers in
/usr/local/odbc/lib, use the
--prefix=/usr/local/odbc option.
The final configuration command looks something like this:
shell> ./configure --prefix=/usr/local \
--with-iodbc=/usr/local \
--with-mysql-path=/usr/local/mysql
20.1.3.5.2. Additional configure Options
There are a number of other options that you need, or want, to
set when configuring the Connector/ODBC driver before it is
built.
To link the driver with MySQL thread safe client libraries
libmysqlclient_r.so or
libmysqlclient_r.a, you must specify
the following configure option:
--enable-thread-safe
and can be disabled (default) using
--disable-thread-safe
This option enables the building of the driver thread-safe
library libmyodbc3_r.so from by
linking with MySQL thread-safe client library
libmysqlclient_r.so (The extensions
are OS dependent).
If the compilation with the thread-safe option fails, it
may be because the correct thread-libraries on the system
could not be located. You should set the value of
LIBS to point to the correct thread
library for your system.
LIBS="-lpthread" ./configure ..
You can enable or disable the shared and static versions
of Connector/ODBC using these options:
--enable-shared[=yes/no]
--disable-shared
--enable-static[=yes/no]
--disable-static
By default, all the binary distributions are built as
nondebugging versions (configured with
--without-debug).
To enable debugging information, build the driver from
source distribution and use the
--with-debug option when
you run configure.
This option is available only for source trees that have
been obtained from the Subversion repository. This option
does not apply to the packaged source distributions.
By default, the driver is built with the
--without-docs option. If you would like
the documentation to be built, then execute
configure with:
--with-docs
20.1.3.5.3. Building and Compilation
To build the driver libraries, you have to just execute
make.
shell> make
If any errors occur, correct them and continue the build
process. If you aren't able to build, then send a detailed
email to <myodbc@lists.mysql.com> for further
assistance.
20.1.3.5.4. Building Shared Libraries
On most platforms, MySQL does not build or support
.so (shared) client libraries by default.
This is based on our experience of problems when building
shared libraries.
In cases like this, you have to download the MySQL
distribution and configure it with these options:
--without-server --enable-shared
To build shared driver libraries, you must specify the
--enable-shared option for
configure. By default,
configure does not enable this option.
If you have configured with the
--disable-shared option, you can build the
.so file from the static libraries using
the following commands:
shell> cd mysql-connector-odbc-3.51.01
shell> make
shell> cd driver
shell> CC=/usr/bin/gcc \
$CC -bundle -flat_namespace -undefined error \
-o .libs/libmyodbc3-3.51.01.so \
catalog.o connect.o cursor.o dll.o error.o execute.o \
handle.o info.o misc.o myodbc3.o options.o prepare.o \
results.o transact.o utility.o \
-L/usr/local/mysql/lib/mysql/ \
-L/usr/local/iodbc/lib/ \
-lz -lc -lmysqlclient -liodbcinst
Make sure to change -liodbcinst to
-lodbcinst if you are using
unixODBC instead of
iODBC, and configure the library paths
accordingly.
This builds and places the
libmyodbc3-3.51.01.so file in the
.libs directory. Copy this file to the
Connector/ODBC library installation directory
(/usr/local/lib (or the
lib directory under the installation
directory that you supplied with the
--prefix).
shell> cd .libs
shell> cp libmyodbc3-3.51.01.so /usr/local/lib
shell> cd /usr/local/lib
shell> ln -s libmyodbc3-3.51.01.so libmyodbc3.so
To build the thread-safe driver library:
shell> CC=/usr/bin/gcc \
$CC -bundle -flat_namespace -undefined error
-o .libs/libmyodbc3_r-3.51.01.so
catalog.o connect.o cursor.o dll.o error.o execute.o
handle.o info.o misc.o myodbc3.o options.o prepare.o
results.o transact.o utility.o
-L/usr/local/mysql/lib/mysql/
-L/usr/local/iodbc/lib/
-lz -lc -lmysqlclient_r -liodbcinst
20.1.3.5.5. Installing Driver Libraries
To install the driver libraries, execute the following
command:
shell> make install
That command installs one of the following sets of libraries:
For Connector/ODBC 3.51:
For thread-safe Connector/ODBC 3.51:
libmyodbc3_r.so
libmyodbc3-3_r.51.01.so
libmyodbc3_r.a
For more information on build process, refer to the
INSTALL file that comes with the source
distribution. Note that if you are trying to use the
make from Sun, you may end up with errors.
On the other hand, GNU gmake should work
fine on all platforms.
20.1.3.5.6. Testing Connector/ODBC on Unix
To run the basic samples provided in the distribution with the
libraries that you built, use the following command:
shell> make test
Before running the tests, create the DSN 'myodbc3' in
odbc.ini and set the environment variable
ODBCINI to the correct
odbc.ini file; and MySQL server is
running. You can find a sample odbc.ini
with the driver distribution.
You can even modify the
samples/run-samples script to pass the
desired DSN, UID, and PASSWORD values as the command-line
arguments to each sample.
20.1.3.5.7. Building Connector/ODBC from Source on Mac OS X
To build the driver on Mac OS X (Darwin), make use of the
following configure example:
shell> ./configure --prefix=/usr/local
--with-unixODBC=/usr/local
--with-mysql-path=/usr/local/mysql
--disable-shared
--enable-gui=no
--host=powerpc-apple
The command assumes that the unixODBC and
MySQL are installed in the default locations. If not,
configure accordingly.
On Mac OS X, --enable-shared builds
.dylib files by default. You can build
.so files like this:
shell> make
shell> cd driver
shell> CC=/usr/bin/gcc \
$CC -bundle -flat_namespace -undefined error
-o .libs/libmyodbc3-3.51.01.so *.o
-L/usr/local/mysql/lib/
-L/usr/local/iodbc/lib
-liodbcinst -lmysqlclient -lz -lc
To build the thread-safe driver library:
shell> CC=/usr/bin/gcc \
$CC -bundle -flat_namespace -undefined error
-o .libs/libmyodbc3-3.51.01.so *.o
-L/usr/local/mysql/lib/
-L/usr/local/iodbc/lib
-liodbcinst -lmysqlclienti_r -lz -lc -lpthread
Make sure to change the -liodbcinst to
-lodbcinst in case of using
unixODBC instead of
iODBC and configure the libraries path
accordingly.
In Apple's version of GCC, both cc and
gcc are actually symbolic links to
gcc3.
Copy this library to the $prefix/lib
directory and symlink to libmyodbc3.so.
You can cross-check the output shared-library properties using
this command:
shell> otool -LD .libs/libmyodbc3-3.51.01.so
20.1.3.5.8. Building Connector/ODBC from Source on HP-UX
To build the driver on HP-UX 10.x or 11.x, make use of the
following configure example:
If using cc:
shell> CC="cc" \
CFLAGS="+z" \
LDFLAGS="-Wl,+b:-Wl,+s" \
./configure --prefix=/usr/local
--with-unixodbc=/usr/local
--with-mysql-path=/usr/local/mysql/lib/mysql
--enable-shared
--enable-thread-safe
If using gcc:
shell> CC="gcc" \
LDFLAGS="-Wl,+b:-Wl,+s" \
./configure --prefix=/usr/local
--with-unixodbc=/usr/local
--with-mysql-path=/usr/local/mysql
--enable-shared
--enable-thread-safe
Once the driver is built, cross-check its attributes using
chatr .libs/libmyodbc3.sl to determine
whether you need to have set the MySQL client library path
using the SHLIB_PATH environment variable.
For static versions, ignore all shared-library options and run
configure with the
--disable-shared option.
20.1.3.5.9. Building Connector/ODBC from Source on AIX
To build the driver on AIX, make use of the following
configure example:
shell> ./configure --prefix=/usr/local
--with-unixodbc=/usr/local
--with-mysql-path=/usr/local/mysql
--disable-shared
--enable-thread-safe
20.1.3.6. Installing Connector/ODBC from the Development Source TreeCaution
You should read this section only if you are interested in
helping us test our new code. If you just want to get MySQL
Connector/ODBC up and running on your system, you should use a
standard release distribution.
To be able to access the Connector/ODBC source tree, you must
have Subversion installed. Subversion is freely available from
http://subversion.tigris.org/.
To build from the source trees, you need the following tools:
autoconf 2.52 (or newer)
automake 1.4 (or newer)
libtool 1.4 (or newer)
m4
The most recent development source tree is available from our
public Subversion trees at
http://dev.mysql.com/tech-resources/sources.html.
To checkout out the Connector/ODBC sources, change to the
directory where you want the copy of the Connector/ODBC tree to
be stored, then use the following command:
shell> svn co http://svn.mysql.com/svnpublic/connector-odbc3
You should now have a copy of the entire Connector/ODBC source
tree in the directory connector-odbc3. To
build from this source tree on Unix or Linux follow these steps:
shell> cd connector-odbc3
shell> aclocal
shell> autoheader
shell> autoconf
shell> automake;
shell> ./configure # Add your favorite options here
shell> make
For more information on how to build, refer to the
INSTALL file located in the same directory.
For more information on options to configure,
see
Section 20.1.3.5.1, “Typical configure Options”
When the build is done, run make install to
install the Connector/ODBC 3.51 driver on your system.
If you have gotten to the make stage and the
distribution does not compile, please report it to
<myodbc@lists.mysql.com>.
On Windows, make use of Windows Makefiles
WIN-Makefile and
WIN-Makefile_debug in building the driver.
For more information, see
Section 20.1.3.4, “Installing Connector/ODBC from a Source Distribution on Windows”.
After the initial checkout operation to get the source tree, you
should run svn update periodically update
your source according to the latest version.
20.1.4. Connector/ODBC Configuration
Before you connect to a MySQL database using the Connector/ODBC
driver you must configure an ODBC Data Source
Name. The DSN associates the various configuration
parameters required to communicate with a database to a specific
name. You use the DSN in an application to communicate with the
database, rather than specifying individual parameters within the
application itself. DSN information can be user specific, system
specific, or provided in a special file. ODBC data source names
are configured in different ways, depending on your platform and
ODBC driver.
20.1.4.1. Data Source Names
A Data Source Name associates the configuration parameters for
communicating with a specific database. Generally a DSN consists
of the following parameters:
- Name
- Host Name
- Database Name
- Login
- Password
In addition, different ODBC drivers, including Connector/ODBC,
may accept additional driver-specific options and parameters.
There are three types of DSN:
A System DSN is a global DSN
definition that is available to any user and application on
a particular system. A System DSN can normally only be
configured by a systems administrator, or by a user who has
specific permissions that let them create System DSNs.
A User DSN is specific to an
individual user, and can be used to store database
connectivity information that the user regularly uses.
A File DSN uses a simple file to
define the DSN configuration. File DSNs can be shared
between users and machines and are therefore more practical
when installing or deploying DSN information as part of an
application across many machines.
DSN information is stored in different locations depending on
your platform and environment.
20.1.4.2. Connector/ODBC Connection Parameters
You can specify the parameters in the following tables for
Connector/ODBC when configuring a DSN. Users on Windows can use
the Options and Advanced panels when configuring a DSN to set
these parameters; see the table for information on which options
relate to which fields and checkboxes. On Unix and Mac OS X, use
the parameter name and value as the keyword/value pair in the
DSN configuration. Alternatively, you can set these parameters
within the InConnectionString argument in the
SQLDriverConnect() call.
Note
The SSL configuration parameters can also be automatically
loaded from a my.ini or
my.cnf file.
The option argument is used to tell
Connector/ODBC that the client isn't 100% ODBC compliant. On
Windows, you normally select options by toggling the checkboxes
in the connection screen, but you can also select them in the
option argument. The following options are
listed in the order in which they appear in the Connector/ODBC
connect screen.
To select multiple options, add together their values. For
example, setting option to 12 (4+8) gives you
debugging without packet limits.
The following table shows some recommended
option values for various configurations.
20.1.4.3. Configuring a Connector/ODBC DSN on Windows
The ODBC Data Source Administrator within
Windows enables you to create DSNs, check driver installation
and configure ODBC systems such as tracing (used for debugging)
and connection pooling.
Different editions and versions of Windows store the
ODBC Data Source Administrator in different
locations depending on the version of Windows that you are
using.
To open the ODBC Data Source Administrator in
Windows Server 2003:
Tip
Because it is possible to create DSN using either the 32-bit
or 64-bit driver, but using the same DNS identifier, it is
advisable to include the driver being used within the DSN
identifier. This will help you to identify the DSN when using
it from applications such as Excel that are only compatible
with the 32-bit driver. For example, you might add
Using32bitCODBC to the DSN identifier for
the 32-bit interface and Using64bitCODBC
for those using the 64-bit Connector/ODBC driver.
On the Start menu, choose
Administrative Tools, and then click
Data Sources (ODBC).
To open the ODBC Data Source Administrator in
Windows 2000 Server or Windows 2000 Professional:
On the Start menu, choose
Settings, and then click Control
Panel.
In Control Panel, click
Administrative Tools.
In Administrative Tools, click
Data Sources (ODBC).
To open the ODBC Data Source Administrator on
Windows XP:
On the Start menu, click Control
Panel.
In the Control Panel when in
Category View click Performance
and Maintenance and then click
Administrative Tools.. If you are viewing
the Control Panel in Classic
View, click Administrative
Tools.
In Administrative Tools, click
Data Sources (ODBC).
Irrespective of your Windows version, you should be presented
the ODBC Data Source Administrator window:
Within Windows XP, you can add the Administrative
Tools folder to your Start menu
to make it easier to locate the ODBC Data Source Administrator.
To do this:
Right click on the Start menu.
Select Properties.
Click Customize....
Select the Advanced tab.
Within Start menu items, within the
System Administrative Tools section,
select Display on the All Programs menu.
Within both Windows Server 2003 and Windows XP you may want to
permanently add the ODBC Data Source
Administrator to your Start
menu. To do this, locate the Data Sources
(ODBC) icon using the methods shown, then right-click
on the icon and then choose Pin to Start
Menu.
The interfaces for the 3.51 and 5.1 versions of the
Connector/ODBC driver are different, although the fields and
information that you need to enter remain the same.
To configure a DSN using Connector/ODBC 3.51.x or Connector/ODBC
5.1.0, see
Section 20.1.4.3.1, “Configuring a Connector/ODBC 3.51 DSN on Windows”.
To configure a DSN using Connector/ODBC 5.1.1 or later, see
Section 20.1.4.3.2, “Configuring a Connector/ODBC 5.1 DSN on Windows”.
20.1.4.3.1. Configuring a Connector/ODBC 3.51 DSN on Windows
To add and configure a new Connector/ODBC data source on
Windows, use the ODBC Data Source
Administrator:
Open the ODBC Data Source
Administrator.
To create a System DSN (which will be available to all
users) , select the System DSN tab. To
create a User DSN, which will be unique only to the
current user, click the Add...
button.
You will need to select the ODBC driver for this DSN.
Select MySQL ODBC 3.51 Driver, then
click Finish.
You now need to configure the specific fields for the DSN
you are creating through the Add Data Source
Name dialog.
In the Data Source Name box, enter
the name of the data source you want to access. It can be
any valid name that you choose.
In the Description box, enter some
text to help identify the connection.
In the Server field, enter the name
of the MySQL server host that you want to access. By
default, it is localhost.
In the User field, enter the user
name to use for this connection.
In the Password field, enter the
corresponding password for this connection.
The Database pop-up should
automatically populate with the list of databases that the
user has permissions to access.
Click OK to save the DSN.
A completed DSN configuration may look like this:
You can verify the connection using the parameters you have
entered by clicking the Test button. If
the connection could be made successfully, you will be
notified with a Success; connection was
made! dialog.
If the connection failed, you can obtain more information on
the test and why it may have failed by clicking the
Diagnostics... button to show
additional error messages.
You can configure a number of options for a specific DSN by
using either the Connect Options or
Advanced tabs in the DSN configuration
dialog.
The three options you can configure are:
Port sets the TCP/IP port number to
use when communicating with MySQL. Communication with
MySQL uses port 3306 by default. If your server is
configured to use a different TCP/IP port, you must
specify that port number here.
Socket sets the name or location of a
specific socket or Windows pipe to use when communicating
with MySQL.
Initial Statement defines an SQL
statement that will be executed when the connection to
MySQL is opened. You can use this to set MySQL options for
your connection, such as disabling autocommit.
Character Set is a pop-up list from
which you can select the default character set to be used
with this connection. The Character Set option was added
in 3.5.17.
The Advanced tab enables you to
configure Connector/ODBC connection parameters. Refer to
Section 20.1.4.2, “Connector/ODBC Connection Parameters”,
for information about the meaning of these options.
20.1.4.3.2. Configuring a Connector/ODBC 5.1 DSN on Windows
The DSN configuration when using Connector/ODBC 5.1.1 and
later has a slightly different layout. Also, due to the native
Unicode support within Connector/ODBC 5.1, you no longer need
to specify the initial character set to be used with your
connection.
To configure a DSN using the Connector/ODBC 5.1.1 or later
driver:
Open the ODBC Data Source
Administrator.
To create a System DSN (which will be available to all
users) , select the System DSN tab.
To create a User DSN, which will be unique only to the
current user, click the Add...
button.
You will need to select the ODBC driver for this DSN.
Select MySQL ODBC 5.1 Driver, then
click Finish.
You now need to configure the specific fields for the DSN
you are creating through the Connection
Parameters dialog.
In the Data Source Name box, enter
the name of the data source you want to access. It can be
any valid name that you choose.
In the Description box, enter some
text to help identify the connection.
In the Server field, enter the name
of the MySQL server host that you want to access. By
default, it is localhost.
In the User field, enter the user
name to use for this connection.
In the Password field, enter the
corresponding password for this connection.
The Database pop-up should
automatically populate with the list of databases that the
user has permissions to access.
To communicate over a different TCP/IP port than the
default (3306), change the value of the
Port.
Click OK to save the DSN.
You can verify the connection using the parameters you have
entered by clicking the Test button. If
the connection could be made successfully, you will be
notified with a Success; connection was
made! dialog.
You can configure a number of options for a specific DSN by
using the Details button.
The Details button opens a tabbed display
which allows you to set additional options:
Flags 1, Flags
2, and Flags 3 enable you
to select the additional flags for the DSN connection. For
more information on these flags, see
Section 20.1.4.2, “Connector/ODBC Connection Parameters”.
Debug allows you to enable ODBC
debugging to record the queries you execute through the
DSN to the myodbc.sql file. For more
information, see
Section 20.1.4.8, “Getting an ODBC Trace File”.
SSL Settings configures the
additional options required for using the Secure Sockets
Layer (SSL) when communicating with MySQL server. Note
that you must have enabled SSL and configured the MySQL
server with suitable certificates to communicate over SSL.
The Advanced tab enables you to
configure Connector/ODBC connection parameters. Refer to
Section 20.1.4.2, “Connector/ODBC Connection Parameters”,
for information about the meaning of these options.
20.1.4.3.3. Errors and Debugging
This section answers Connector/ODBC connection-related
questions.
While configuring a Connector/ODBC
DSN, a Could Not Load Translator or Setup
Library error occurs
For more information, refer to
MS
KnowledgeBase Article(Q260558). Also, make sure
you have the latest valid ctl3d32.dll
in your system directory.
On Windows, the default myodbc3.dll
is compiled for optimal performance. If you want to debug
Connector/ODBC 3.51 (for example, to enable tracing), you
should instead use myodbc3d.dll. To
install this file, copy myodbc3d.dll
over the installed myodbc3.dll file.
Make sure to revert back to the release version of the
driver DLL once you are done with the debugging because
the debug version may cause performance issues. Note that
the myodbc3d.dll isn't included in
Connector/ODBC 3.51.07 through 3.51.11. If you are using
one of these versions, you should copy that DLL from a
previous version (for example, 3.51.06).
20.1.4.4. Configuring a Connector/ODBC DSN on Mac OS X
To configure a DSN on Mac OS X you can either use the
myodbc3i utility, edit the
odbc.ini file within the
Library/ODBC directory of the user or the
should use the ODBC Administrator. If you have Mac OS X 10.2 or
earlier, refer to
Section 20.1.4.5, “Configuring a Connector/ODBC DSN on Unix”. Select
whether you want to create a User DSN or a System DSN. If you
want to add a System DSN, you may need to authenticate with the
system. You must click the padlock and enter a user and password
with administrator privileges.
For correct operation of ODBC Administrator, you should ensure
that the /Library/ODBC/odbc.ini file used
to set up ODBC connectivity and DSNs are writable by the
admin group. If this file is not writable by
this group then the ODBC Administrator may fail, or may appear
to have worked but not generated the correct entry.
Warning
There are known issues with the OS X ODBC Administrator and
Connector/ODBC that may prevent you from creating a DSN using
this method. In this case you should use the command-line or
edit the odbc.ini file directly. Note
that existing DSNs or those that you create via the
myodbc3i or
myodbc-installertool can still be checked
and edited using ODBC Administrator.
To create a DSN using the myodbc3i utility,
you need only specify the DSN type and the DSN connection
string. For example:
shell> myodbc3i -a -s -t"DSN=mydb;DRIVER=MySQL ODBC 3.51 Driver;SERVER=mysql;USER=username;PASSWORD=pass"
To use ODBC Administrator:
Open the ODBC Administrator from the
Utilities folder in the
Applications folder.
On the User DSN or System DSN panel, click
Add.
Select the Connector/ODBC driver and click
OK.
You will be presented with the Data Source
Name dialog. Enter The Data Source
Name and an optional
Description for the DSN.
Click Add to add a new keyword/value
pair to the panel. You should configure at least four pairs
to specify the server,
username, password and
database connection parameters. See
Section 20.1.4.2, “Connector/ODBC Connection Parameters”.
Click OK to add the DSN to the list
of configured data source names.
A completed DSN configuration may look like this:
You can configure additional ODBC options to your DSN by adding
further keyword/value pairs and setting the corresponding
values. See
Section 20.1.4.2, “Connector/ODBC Connection Parameters”.
20.1.4.5. Configuring a Connector/ODBC DSN on Unix
On Unix, you configure DSN entries directly
in the odbc.ini file. Here is a typical
odbc.ini file that configures
myodbc3 as the DSN name for Connector/ODBC
3.51:
;
; odbc.ini configuration for Connector/ODBC and Connector/ODBC 3.51 drivers
;
[ODBC Data Sources]
myodbc3 = MyODBC 3.51 Driver DSN
[myodbc3]
Driver = /usr/local/lib/libmyodbc3.so
Description = Connector/ODBC 3.51 Driver DSN
SERVER = localhost
PORT =
USER = root
Password =
Database = test
OPTION = 3
SOCKET =
[Default]
Driver = /usr/local/lib/libmyodbc3.so
Description = Connector/ODBC 3.51 Driver DSN
SERVER = localhost
PORT =
USER = root
Password =
Database = test
OPTION = 3
SOCKET =
Refer to the
Section 20.1.4.2, “Connector/ODBC Connection Parameters”,
for the list of connection parameters that can be supplied.
Note
If you are using unixODBC, you can use the
following tools to set up the DSN:
In some cases when using unixODBC, you might
get this error:
Data source name not found and no default driver specified
If this happens, make sure the ODBCINI and
ODBCSYSINI environment variables are pointing
to the right odbc.ini file. For example, if
your odbc.ini file is located in
/usr/local/etc, set the environment
variables like this:
export ODBCINI=/usr/local/etc/odbc.ini
export ODBCSYSINI=/usr/local/etc
20.1.4.6. Connecting Without a Predefined DSN
You can connect to the MySQL server using SQLDriverConnect, by
specifying the DRIVER name field. Here are
the connection strings for Connector/ODBC using DSN-Less
connections:
For Connector/ODBC 3.51:
ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};\
SERVER=localhost;\
DATABASE=test;\
USER=venu;\
PASSWORD=venu;\
OPTION=3;"
If your programming language converts backslash followed by
whitespace to a space, it is preferable to specify the
connection string as a single long string, or to use a
concatenation of multiple strings that does not add spaces in
between. For example:
ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};"
"SERVER=localhost;"
"DATABASE=test;"
"USER=venu;"
"PASSWORD=venu;"
"OPTION=3;"Note.
Note that on Mac OS X you may need to specify the full path to
the Connector/ODBC driver library.
Refer to the
Section 20.1.4.2, “Connector/ODBC Connection Parameters”,
for the list of connection parameters that can be supplied.
20.1.4.7. ODBC Connection Pooling
Connection pooling enables the ODBC driver to re-use existing
connections to a given database from a pool of connections,
instead of opening a new connection each time the database is
accessed. By enabling connection pooling you can improve the
overall performance of your application by lowering the time
taken to open a connection to a database in the connection pool.
For more information about connection pooling:
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q169470.
20.1.4.8. Getting an ODBC Trace File
If you encounter difficulties or problems with Connector/ODBC,
you should start by making a log file from the ODBC
Manager and Connector/ODBC. This is called
tracing, and is enabled through the ODBC
Manager. The procedure for this differs for Windows, Mac OS X
and Unix.
20.1.4.8.1. Enabling ODBC Tracing on Windows
To enable the trace option on Windows:
The Tracing tab of the ODBC Data Source
Administrator dialog box enables you to configure the way
ODBC function calls are traced.
When you activate tracing from the
Tracing tab, the Driver
Manager logs all ODBC function calls for all
subsequently run applications.
ODBC function calls from applications running before
tracing is activated are not logged. ODBC function calls
are recorded in a log file you specify.
Tracing ceases only after you click Stop Tracing
Now. Remember that while tracing is on, the log
file continues to increase in size and that tracing
affects the performance of all your ODBC applications.
20.1.4.8.2. Enabling ODBC Tracing on Mac OS X
To enable the trace option on Mac OS X 10.3 or later you
should use the Tracing tab within
ODBC Administrator .
Open the ODBC Administrator.
Select the Tracing tab.
Select the Enable Tracing checkbox.
Enter the location where you want to save the Tracing log.
If you want to append information to an existing log file,
click the Choose... button.
20.1.4.8.3. Enabling ODBC Tracing on Unix
To enable the trace option on Mac OS X 10.2 (or earlier) or
Unix you must add the trace option to the
ODBC configuration:
On Unix, you need to explicitly set the
Trace option in the
ODBC.INI file.
Set the tracing ON or
OFF by using
TraceFile and Trace
parameters in odbc.ini as shown
below:
TraceFile = /tmp/odbc.trace
Trace = 1
TraceFile specifies the name and full
path of the trace file and Trace is set
to ON or OFF. You
can also use 1 or
YES for ON and
0 or NO for
OFF. If you are using
ODBCConfig from
unixODBC, then follow the instructions
for tracing unixODBC calls at
HOWTO-ODBCConfig.
20.1.4.8.4. Enabling a Connector/ODBC Log
To generate a Connector/ODBC log, do the following:
Within Windows, enable the Trace
Connector/ODBC option flag in the Connector/ODBC
connect/configure screen. The log is written to file
C:\myodbc.log. If the trace option is
not remembered when you are going back to the above
screen, it means that you are not using the
myodbcd.dll driver, see
Section 20.1.4.3.3, “Errors and Debugging”.
On Mac OS X, Unix, or if you are using DSN-Less
connection, then you need to supply
OPTION=4 in the connection string or
set the corresponding keyword/value pair in the DSN.
Start your application and try to get it to fail. Then
check the Connector/ODBC trace file to find out what could
be wrong.
If you need help determining what is wrong, see
Section 20.1.8.1, “Connector/ODBC Community Support”.
20.1.5. Connector/ODBC Examples
Once you have configured a DSN to provide access to a database,
how you access and use that connection is dependent on the
application or programming language. As ODBC is a standardized
interface, any application or language that supports ODBC can use
the DSN and connect to the configured database.
20.1.5.1. Basic Connector/ODBC Application Steps
Interacting with a MySQL server from an applications using the
Connector/ODBC typically involves the following operations:
Configure the Connector/ODBC DSN
Connect to MySQL server
Initialization operations
Execute SQL statements
Retrieve results
Perform Transactions
Disconnect from the server
Most applications use some variation of these steps. The basic
application steps are shown in the following diagram:
20.1.5.2. Step-by-step Guide to Connecting to a MySQL Database through
Connector/ODBC
A typical installation situation where you would install
Connector/ODBC is when you want to access a database on a Linux
or Unix host from a Windows machine.
As an example of the process required to set up access between
two machines, the steps below take you through the basic steps.
These instructions assume that you want to connect to system
ALPHA from system BETA with a user name and password of
myuser and mypassword.
On system ALPHA (the MySQL server) follow these steps:
Start the MySQL server.
Use GRANT to set up an
account with a user name of myuser that
can connect from system BETA using a password of
myuser to the database
test:
GRANT ALL ON test.* to 'myuser'@'BETA' IDENTIFIED BY 'mypassword';
For more information about MySQL privileges, refer to
Section 5.5, “MySQL User Account Management”.
On system BETA (the Connector/ODBC client), follow these steps:
Configure a Connector/ODBC DSN using parameters that match
the server, database and authentication information that you
have just configured on system ALPHA.
Using an ODBC-capable application, such as Microsoft Office,
connect to the MySQL server using the DSN you have just
created. If the connection fails, use tracing to examine the
connection process. See
Section 20.1.4.8, “Getting an ODBC Trace File”, for
more information.
20.1.5.3. Connector/ODBC and Third-Party ODBC Tools
Once you have configured your Connector/ODBC DSN, you can access
your MySQL database through any application that supports the
ODBC interface, including programming languages and third-party
applications. This section contains guides and help on using
Connector/ODBC with various ODBC-compatible tools and
applications, including Microsoft Word, Microsoft Excel and
Adobe/Macromedia ColdFusion.
Connector/ODBC has been tested with the following applications.
If you know of any other applications that work with
Connector/ODBC, please send mail to
<myodbc@lists.mysql.com> about them.
20.1.5.4. Using Connector/ODBC with Microsoft Access
You can use MySQL database with Microsoft Access using
Connector/ODBC. The MySQL database can be used as an import
source, an export source, or as a linked table for direct use
within an Access application, so you can use Access as the
front-end interface to a MySQL database.
20.1.5.4.1. Exporting Access Data to MySQL
To export a table of data from an Access database to MySQL,
follow these instructions:
When you open an Access database or an Access project, a
Database window appears. It displays shortcuts for
creating new database objects and opening existing
objects.
Click the name of the table or
query you want to export, and then in
the File menu, select
Export.
In the Export Object Type Object
name To dialog box, in the
Save As Type box, select ODBC
Databases () as shown here:
In the Export dialog box, enter a name
for the file (or use the suggested name), and then select
OK.
The Select Data Source dialog box is displayed; it lists
the defined data sources for any ODBC drivers installed on
your computer. Click either the File Data Source or
Machine Data Source tab, and then double-click the
Connector/ODBC or Connector/ODBC 3.51 data source that you
want to export to. To define a new data source for
Connector/ODBC, please
Section 20.1.4.3, “Configuring a Connector/ODBC DSN on Windows”.
Note
Ensure that the information that you are exporting to the
MySQL table is valid for the corresponding MySQL data types.
Values that are outside of the supported range of the MySQL
data type but valid within Access may trigger an
“overflow” error during the export.
Microsoft Access connects to the MySQL Server through this
data source and exports new tables and or data.
20.1.5.4.2. Importing MySQL Data to Access
To import a table or tables from MySQL to Access, follow these
instructions:
Open a database, or switch to the Database window for the
open database.
To import tables, on the File menu,
point to Get External Data, and then
click Import.
In the Import dialog box, in the Files
Of Type box, select ODBC Databases
(). The Select Data Source dialog box lists the
defined data sources The Select Data
Source dialog box is displayed; it lists the
defined data source names.
If the ODBC data source that you selected requires you to
log on, enter your login ID and password (additional
information might also be required), and then click
OK.
Microsoft Access connects to the MySQL server through
ODBC data source and displays the list
of tables that you can import.
Click each table that you want to
import, and then click
OK.
20.1.5.4.3. Using Microsoft Access as a Front-end to MySQL
You can use Microsoft Access as a front end to a MySQL
database by linking tables within your Microsoft Access
database to tables that exist within your MySQL database. When
a query is requested on a table within Access, ODBC is used to
execute the queries on the MySQL database instead.
To create a linked table:
Open the Access database that you want to link to MySQL.
From the , choose .
From the browser, choose ODBC Databases
() from the Files of type
pop-up.
In the Select Data Source window,
choose an existing DSN, either from a File Data
Source or Machine Data
Source.You can also create a new DSN using the
New... button. For more information
on creating a DSN see
Section 20.1.4.3, “Configuring a Connector/ODBC DSN on Windows”.
In the Link Tables dialog, select one
or more tables from the MySQL database. A link will be
created to each table that you select from this list.
If Microsoft Access is unable to determine the unique
record identifier for a table automatically then it may
ask you to confirm the column, or combination of columns,
to be used to uniquely identify each row from the source
table. Select the columns you want to use and click
OK.
Once the process has been completed, you can now build
interfaces and queries to the linked tables just as you would
for any Access database.
Use the following procedure to view or to refresh links when
the structure or location of a linked table has changed. The
Linked Table Manager lists the paths to all currently linked
tables.
To view or refresh links:
Open the database that contains links to MySQL tables.
On the Tools menu, point to
Add-ins (Database
Utilities in Access 2000 or newer), and then
click Linked Table Manager.
Select the check box for the tables whose links you want
to refresh.
Click OK to refresh the links.
Microsoft Access confirms a successful refresh or, if the
table wasn't found, displays the Select New Location
of <table name> dialog box in which you can
specify its the table's new location. If several selected
tables have moved to the new location that you specify, the
Linked Table Manager searches that location for all selected
tables, and updates all links in one step.
To change the path for a set of linked
tables:
Open the database that contains links to tables.
On the Tools menu, point to
Add-ins (Database
Utilities in Access 2000 or newer), and then
click Linked Table Manager.
Select the Always Prompt For A New
Location check box.
Select the check box for the tables whose links you want
to change, and then click OK.
In the Select New Location of <table
name> dialog box, specify the new location, click
Open, and then click
OK.
20.1.5.5. Using Connector/ODBC with Microsoft Word or Excel
You can use Microsoft Word and Microsoft Excel to access
information from a MySQL database using Connector/ODBC. Within
Microsoft Word, this facility is most useful when importing data
for mailmerge, or for tables and data to be included in reports.
Within Microsoft Excel, you can execute queries on your MySQL
server and import the data directly into an Excel Worksheet,
presenting the data as a series of rows and columns.
With both applications, data is accessed and imported into the
application using Microsoft Query ,
which enables you to execute a query though an ODBC source. You
use Microsoft Query to build the SQL statement to be executed,
selecting the tables, fields, selection criteria and sort order.
For example, to insert information from a table in the World
test database into an Excel spreadsheet, using the DSN samples
shown in Section 20.1.4, “Connector/ODBC Configuration”:
Create a new Worksheet.
From the Data menu, choose
Import External Data, and then select
New Database Query.
Microsoft Query will start.
First, you need to choose the data source, by selecting an
existing Data Source Name.
Within the Query Wizard, you must choose
the columns that you want to import. The list of tables
available to the user configured through the DSN is shown on
the left, the columns that will be added to your query are
shown on the right. The columns you choose are equivalent to
those in the first section of a
SELECT query. Click
Next to continue.
You can filter rows from the query (the equivalent of a
WHERE clause) using the Filter
Data dialog. Click Next to
continue.
Select an (optional) sort order for the data. This is
equivalent to using a ORDER BY clause in
your SQL query. You can select up to three fields for
sorting the information returned by the query. Click
Next to continue.
Select the destination for your query. You can select to
return the data Microsoft Excel, where you can choose a
worksheet and cell where the data will be inserted; you can
continue to view the query and results within Microsoft
Query, where you can edit the SQL query and further filter
and sort the information returned; or you can create an OLAP
Cube from the query, which can then be used directly within
Microsoft Excel. Click Finish.
The same process can be used to import data into a Word
document, where the data will be inserted as a table. This can
be used for mail merge purposes (where the field data is read
from a Word table), or where you want to include data and
reports within a report or other document.
20.1.5.6. Using Connector/ODBC with Crystal Reports
Crystal Reports can use an ODBC DSN to connect to a database
from which you to extract data and information for reporting
purposes.
Note
There is a known issue with certain versions of Crystal
Reports where the application is unable to open and browse
tables and fields through an ODBC connection. Before using
Crystal Reports with MySQL, please ensure that you have update
to the latest version, including any outstanding service packs
and hotfixes. For more information on this issue, see the
Business)
Objects Knowledgebase for more information.
For example, to create a simple crosstab report within Crystal
Reports XI, you should follow these steps:
Create a DSN using the Data Sources
(ODBC) tool. You can either specify a complete
database, including user name and password, or you can build
a basic DSN and use Crystal Reports to set the user name and
password.
For the purposes of this example, a DSN that provides a
connection to an instance of the MySQL Sakila sample
database has been created.
Open Crystal Reports and create a new project, or an open an
existing reporting project into which you want to insert
data from your MySQL data source.
Start the Cross-Tab Report Wizard, either by clicking on the
option on the Start Page. Expand the Create New
Connection folder, then expand the ODBC
(RDO) folder to obtain a list of ODBC data
sources.
You will be asked to select a data source.
When you first expand the ODBC (RDO)
folder you will be presented the Data Source Selection
screen. From here you can select either a pre-configured
DSN, open a file-based DSN or enter and manual connection
string. For this example, the Sakila
DSN will be used.
If the DSN contains a user name/password combination, or you
want to use different authentication credentials, click
Next to enter the user name and
password that you want to use. Otherwise, click
Finish to continue the data source
selection wizard.
You will be returned the Cross-Tab Report Creation Wizard.
You now need to select the database and tables that you want
to include in your report. For our example, we will expand
the selected Sakila database. Click the
city table and use the
> button to add the table to the
report. Then repeat the action with the
country table. Alternatively you can
select multiple tables and add them to the report.
Finally, you can select the parent
Sakila resource and add of the tables
to the report.
Once you have selected the tables you want to include, click
Next to continue.
Crystal Reports will now read the table definitions and
automatically identify the links between the tables. The
identification of links between tables enables Crystal
Reports to automatically lookup and summarize information
based on all the tables in the database according to your
query. If Crystal Reports is unable to perform the linking
itself, you can manually create the links between fields in
the tables you have selected.
Click Next to continue the process.
You can now select the columns and rows that you wish to
include within the Cross-Tab report. Drag and drop or use
the > buttons to add fields to
each area of the report. In the example shown, we will
report on cities, organized by country, incorporating a
count of the number of cities within each country. If you
want to browse the data, select a field and click the
Browse Data... button.
Click Next to create a graph of the
results. Since we are not creating a graph from this data,
click Finish to generate the report.
The finished report will be shown, a sample of the output
from the Sakila sample database is shown below.
Once the ODBC connection has been opened within Crystal Reports,
you can browse and add any fields within the available tables
into your reports.
20.1.5.7. Connector/ODBC Programming
With a suitable ODBC Manager and the Connector/ODBC driver
installed, any programming language or environment that can
support ODBC should be able to connect to a MySQL database
through Connector/ODBC.
This includes, but is certainly not limited to, Microsoft
support languages (including Visual Basic, C# and interfaces
such as ODBC.NET), Perl (through the DBI module, and the
DBD::ODBC driver).
20.1.5.7.1. Using Connector/ODBC with Visual Basic Using ADO, DAO and RDO
This section contains simple examples of the use of MySQL ODBC
3.51 Driver with ADO, DAO and RDO.
20.1.5.7.1.1. ADO: rs.addNew, rs.delete, and
rs.update
The following ADO (ActiveX Data Objects) example creates a
table my_ado and demonstrates the use of
rs.addNew, rs.delete,
and rs.update.
Private Sub myodbc_ado_Click()
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim fld As ADODB.Field
Dim sql As String
'connect to MySQL server using MySQL ODBC 3.51 Driver
Set conn = New ADODB.Connection
conn.ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};"_
& "SERVER=localhost;"_
& " DATABASE=test;"_
& "UID=venu;PWD=venu; OPTION=3"
conn.Open
'create table
conn.Execute "DROP TABLE IF EXISTS my_ado"
conn.Execute "CREATE TABLE my_ado(id int not null primary key, name varchar(20)," _
& "txt text, dt date, tm time, ts timestamp)"
'direct insert
conn.Execute "INSERT INTO my_ado(id,name,txt) values(1,100,'venu')"
conn.Execute "INSERT INTO my_ado(id,name,txt) values(2,200,'MySQL')"
conn.Execute "INSERT INTO my_ado(id,name,txt) values(3,300,'Delete')"
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseServer
'fetch the initial table ..
rs.Open "SELECT * FROM my_ado", conn
Debug.Print rs.RecordCount
rs.MoveFirst
Debug.Print String(50, "-") & "Initial my_ado Result Set " & String(50, "-")
For Each fld In rs.Fields
Debug.Print fld.Name,
Next
Debug.Print
Do Until rs.EOF
For Each fld In rs.Fields
Debug.Print fld.Value,
Next
rs.MoveNext
Debug.Print
Loop
rs.Close
'rs insert
rs.Open "select * from my_ado", conn, adOpenDynamic, adLockOptimistic
rs.AddNew
rs!Name = "Monty"
rs!txt = "Insert row"
rs.Update
rs.Close
'rs update
rs.Open "SELECT * FROM my_ado"
rs!Name = "update"
rs!txt = "updated-row"
rs.Update
rs.Close
'rs update second time..
rs.Open "SELECT * FROM my_ado"
rs!Name = "update"
rs!txt = "updated-second-time"
rs.Update
rs.Close
'rs delete
rs.Open "SELECT * FROM my_ado"
rs.MoveNext
rs.MoveNext
rs.Delete
rs.Close
'fetch the updated table ..
rs.Open "SELECT * FROM my_ado", conn
Debug.Print rs.RecordCount
rs.MoveFirst
Debug.Print String(50, "-") & "Updated my_ado Result Set " & String(50, "-")
For Each fld In rs.Fields
Debug.Print fld.Name,
Next
Debug.Print
Do Until rs.EOF
For Each fld In rs.Fields
Debug.Print fld.Value,
Next
rs.MoveNext
Debug.Print
Loop
rs.Close
conn.Close
End Sub20.1.5.7.1.2. DAO: rs.addNew, rs.update, and
Scrolling
The following DAO (Data Access Objects) example creates a
table my_dao and demonstrates the use of
rs.addNew, rs.update,
and result set scrolling.
Private Sub myodbc_dao_Click()
Dim ws As Workspace
Dim conn As Connection
Dim queryDef As queryDef
Dim str As String
'connect to MySQL using MySQL ODBC 3.51 Driver
Set ws = DBEngine.CreateWorkspace("", "venu", "venu", dbUseODBC)
str = "odbc;DRIVER={MySQL ODBC 3.51 Driver};"_
& "SERVER=localhost;"_
& " DATABASE=test;"_
& "UID=venu;PWD=venu; OPTION=3"
Set conn = ws.OpenConnection("test", dbDriverNoPrompt, False, str)
'Create table my_dao
Set queryDef = conn.CreateQueryDef("", "drop table if exists my_dao")
queryDef.Execute
Set queryDef = conn.CreateQueryDef("", "create table my_dao(Id INT AUTO_INCREMENT PRIMARY KEY, " _
& "Ts TIMESTAMP(14) NOT NULL, Name varchar(20), Id2 INT)")
queryDef.Execute
'Insert new records using rs.addNew
Set rs = conn.OpenRecordset("my_dao")
Dim i As Integer
For i = 10 To 15
rs.AddNew
rs!Name = "insert record" & i
rs!Id2 = i
rs.Update
Next i
rs.Close
'rs update..
Set rs = conn.OpenRecordset("my_dao")
rs.Edit
rs!Name = "updated-string"
rs.Update
rs.Close
'fetch the table back...
Set rs = conn.OpenRecordset("my_dao", dbOpenDynamic)
str = "Results:"
rs.MoveFirst
While Not rs.EOF
str = " " & rs!Id & " , " & rs!Name & ", " & rs!Ts & ", " & rs!Id2
Debug.Print "DATA:" & str
rs.MoveNext
Wend
'rs Scrolling
rs.MoveFirst
str = " FIRST ROW: " & rs!Id & " , " & rs!Name & ", " & rs!Ts & ", " & rs!Id2
Debug.Print str
rs.MoveLast
str = " LAST ROW: " & rs!Id & " , " & rs!Name & ", " & rs!Ts & ", " & rs!Id2
Debug.Print str
rs.MovePrevious
str = " LAST-1 ROW: " & rs!Id & " , " & rs!Name & ", " & rs!Ts & ", " & rs!Id2
Debug.Print str
'free all resources
rs.Close
queryDef.Close
conn.Close
ws.Close
End Sub20.1.5.7.1.3. RDO: rs.addNew and rs.update
The following RDO (Remote Data Objects) example creates a
table my_rdo and demonstrates the use of
rs.addNew and
rs.update.
Dim rs As rdoResultset
Dim cn As New rdoConnection
Dim cl As rdoColumn
Dim SQL As String
'cn.Connect = "DSN=test;"
cn.Connect = "DRIVER={MySQL ODBC 3.51 Driver};"_
& "SERVER=localhost;"_
& " DATABASE=test;"_
& "UID=venu;PWD=venu; OPTION=3"
cn.CursorDriver = rdUseOdbc
cn.EstablishConnection rdDriverPrompt
'drop table my_rdo
SQL = "drop table if exists my_rdo"
cn.Execute SQL, rdExecDirect
'create table my_rdo
SQL = "create table my_rdo(id int, name varchar(20))"
cn.Execute SQL, rdExecDirect
'insert - direct
SQL = "insert into my_rdo values (100,'venu')"
cn.Execute SQL, rdExecDirect
SQL = "insert into my_rdo values (200,'MySQL')"
cn.Execute SQL, rdExecDirect
'rs insert
SQL = "select * from my_rdo"
Set rs = cn.OpenResultset(SQL, rdOpenStatic, rdConcurRowVer, rdExecDirect)
rs.AddNew
rs!id = 300
rs!Name = "Insert1"
rs.Update
rs.Close
'rs insert
SQL = "select * from my_rdo"
Set rs = cn.OpenResultset(SQL, rdOpenStatic, rdConcurRowVer, rdExecDirect)
rs.AddNew
rs!id = 400
rs!Name = "Insert 2"
rs.Update
rs.Close
'rs update
SQL = "select * from my_rdo"
Set rs = cn.OpenResultset(SQL, rdOpenStatic, rdConcurRowVer, rdExecDirect)
rs.Edit
rs!id = 999
rs!Name = "updated"
rs.Update
rs.Close
'fetch back...
SQL = "select * from my_rdo"
Set rs = cn.OpenResultset(SQL, rdOpenStatic, rdConcurRowVer, rdExecDirect)
Do Until rs.EOF
For Each cl In rs.rdoColumns
Debug.Print cl.Value,
Next
rs.MoveNext
Debug.Print
Loop
Debug.Print "Row count="; rs.RowCount
'close
rs.Close
cn.Close
End Sub20.1.5.7.2. Using Connector/ODBC with .NET
This section contains simple examples that demonstrate the use
of Connector/ODBC drivers with ODBC.NET.
20.1.5.7.2.1. Using Connector/ODBC with ODBC.NET and C# (C sharp)
The following sample creates a table
my_odbc_net and demonstrates its use in
C#.
/**
* @sample : mycon.cs
* @purpose : Demo sample for ODBC.NET using Connector/ODBC
* @author : Venu, <myodbc@lists.mysql.com>
*
* (C) Copyright MySQL AB, 1995-2006
*
**/
/* build command
*
* csc /t:exe
* /out:mycon.exe mycon.cs
* /r:Microsoft.Data.Odbc.dll
*/
using Console = System.Console;
using Microsoft.Data.Odbc;
namespace myodbc3
{
class mycon
{
static void Main(string[] args)
{
try
{
//Connection string for Connector/ODBC 3.51
string MyConString = "DRIVER={MySQL ODBC 3.51 Driver};" +
"SERVER=localhost;" +
"DATABASE=test;" +
"UID=venu;" +
"PASSWORD=venu;" +
"OPTION=3";
//Connect to MySQL using Connector/ODBC
OdbcConnection MyConnection = new OdbcConnection(MyConString);
MyConnection.Open();
Console.WriteLine("\n !!! success, connected successfully !!!\n");
//Display connection information
Console.WriteLine("Connection Information:");
Console.WriteLine("\tConnection String:" +
MyConnection.ConnectionString);
Console.WriteLine("\tConnection Timeout:" +
MyConnection.ConnectionTimeout);
Console.WriteLine("\tDatabase:" +
MyConnection.Database);
Console.WriteLine("\tDataSource:" +
MyConnection.DataSource);
Console.WriteLine("\tDriver:" +
MyConnection.Driver);
Console.WriteLine("\tServerVersion:" +
MyConnection.ServerVersion);
//Create a sample table
OdbcCommand MyCommand =
new OdbcCommand("DROP TABLE IF EXISTS my_odbc_net",
MyConnection);
MyCommand.ExecuteNonQuery();
MyCommand.CommandText =
"CREATE TABLE my_odbc_net(id int, name varchar(20), idb bigint)";
MyCommand.ExecuteNonQuery();
//Insert
MyCommand.CommandText =
"INSERT INTO my_odbc_net VALUES(10,'venu', 300)";
Console.WriteLine("INSERT, Total rows affected:" +
MyCommand.ExecuteNonQuery());;
//Insert
MyCommand.CommandText =
"INSERT INTO my_odbc_net VALUES(20,'mysql',400)";
Console.WriteLine("INSERT, Total rows affected:" +
MyCommand.ExecuteNonQuery());
//Insert
MyCommand.CommandText =
"INSERT INTO my_odbc_net VALUES(20,'mysql',500)";
Console.WriteLine("INSERT, Total rows affected:" +
MyCommand.ExecuteNonQuery());
//Update
MyCommand.CommandText =
"UPDATE my_odbc_net SET id=999 WHERE id=20";
Console.WriteLine("Update, Total rows affected:" +
MyCommand.ExecuteNonQuery());
//COUNT(*)
MyCommand.CommandText =
"SELECT COUNT(*) as TRows FROM my_odbc_net";
Console.WriteLine("Total Rows:" +
MyCommand.ExecuteScalar());
//Fetch
MyCommand.CommandText = "SELECT * FROM my_odbc_net";
OdbcDataReader MyDataReader;
MyDataReader = MyCommand.ExecuteReader();
while (MyDataReader.Read())
{
if(string.Compare(MyConnection.Driver,"myodbc3.dll") == 0) {
//Supported only by Connector/ODBC 3.51
Console.WriteLine("Data:" + MyDataReader.GetInt32(0) + " " +
MyDataReader.GetString(1) + " " +
MyDataReader.GetInt64(2));
}
else {
//BIGINTs not supported by Connector/ODBC
Console.WriteLine("Data:" + MyDataReader.GetInt32(0) + " " +
MyDataReader.GetString(1) + " " +
MyDataReader.GetInt32(2));
}
}
//Close all resources
MyDataReader.Close();
MyConnection.Close();
}
catch (OdbcException MyOdbcException) //Catch any ODBC exception ..
{
for (int i=0; i < MyOdbcException.Errors.Count; i++)
{
Console.Write("ERROR #" + i + "\n" +
"Message: " +
MyOdbcException.Errors[i].Message + "\n" +
"Native: " +
MyOdbcException.Errors[i].NativeError.ToString() + "\n" +
"Source: " +
MyOdbcException.Errors[i].Source + "\n" +
"SQL: " +
MyOdbcException.Errors[i].SQLState + "\n");
}
}
}
}
}
20.1.5.7.2.2. Using Connector/ODBC with ODBC.NET and Visual Basic
The following sample creates a table
my_vb_net and demonstrates the use in VB.
' @sample : myvb.vb
' @purpose : Demo sample for ODBC.NET using Connector/ODBC
' @author : Venu, <myodbc@lists.mysql.com>
'
' (C) Copyright MySQL AB, 1995-2006
'
'
'
' build command
'
' vbc /target:exe
' /out:myvb.exe
' /r:Microsoft.Data.Odbc.dll
' /r:System.dll
' /r:System.Data.dll
'
Imports Microsoft.Data.Odbc
Imports System
Module myvb
Sub Main()
Try
'Connector/ODBC 3.51 connection string
Dim MyConString As String = "DRIVER={MySQL ODBC 3.51 Driver};" & _
"SERVER=localhost;" & _
"DATABASE=test;" & _
"UID=venu;" & _
"PASSWORD=venu;" & _
"OPTION=3;"
'Connection
Dim MyConnection As New OdbcConnection(MyConString)
MyConnection.Open()
Console.WriteLine("Connection State::" & MyConnection.State.ToString)
'Drop
Console.WriteLine("Dropping table")
Dim MyCommand As New OdbcCommand()
MyCommand.Connection = MyConnection
MyCommand.CommandText = "DROP TABLE IF EXISTS my_vb_net"
MyCommand.ExecuteNonQuery()
'Create
Console.WriteLine("Creating....")
MyCommand.CommandText = "CREATE TABLE my_vb_net(id int, name varchar(30))"
MyCommand.ExecuteNonQuery()
'Insert
MyCommand.CommandText = "INSERT INTO my_vb_net VALUES(10,'venu')"
Console.WriteLine("INSERT, Total rows affected:" & _
MyCommand.ExecuteNonQuery())
'Insert
MyCommand.CommandText = "INSERT INTO my_vb_net VALUES(20,'mysql')"
Console.WriteLine("INSERT, Total rows affected:" & _
MyCommand.ExecuteNonQuery())
'Insert
MyCommand.CommandText = "INSERT INTO my_vb_net VALUES(20,'mysql')"
Console.WriteLine("INSERT, Total rows affected:" & _
MyCommand.ExecuteNonQuery())
'Insert
MyCommand.CommandText = "INSERT INTO my_vb_net(id) VALUES(30)"
Console.WriteLine("INSERT, Total rows affected:" & _
MyCommand.ExecuteNonQuery())
'Update
MyCommand.CommandText = "UPDATE my_vb_net SET id=999 WHERE id=20"
Console.WriteLine("Update, Total rows affected:" & _
MyCommand.ExecuteNonQuery())
'COUNT(*)
MyCommand.CommandText = "SELECT COUNT(*) as TRows FROM my_vb_net"
Console.WriteLine("Total Rows:" & MyCommand.ExecuteScalar())
'Select
Console.WriteLine("Select * FROM my_vb_net")
MyCommand.CommandText = "SELECT * FROM my_vb_net"
Dim MyDataReader As OdbcDataReader
MyDataReader = MyCommand.ExecuteReader
While MyDataReader.Read
If MyDataReader("name") Is DBNull.Value Then
Console.WriteLine("id = " & _
CStr(MyDataReader("id")) & " name = " & _
"NULL")
Else
Console.WriteLine("id = " & _
CStr(MyDataReader("id")) & " name = " & _
CStr(MyDataReader("name")))
End If
End While
'Catch ODBC Exception
Catch MyOdbcException As OdbcException
Dim i As Integer
Console.WriteLine(MyOdbcException.ToString)
'Catch program exception
Catch MyException As Exception
Console.WriteLine(MyException.ToString)
End Try
End Sub 20.1.6. Connector/ODBC Reference
This section provides reference material for the Connector/ODBC
API, showing supported functions and methods, supported MySQL
column types and the corresponding native type in Connector/ODBC,
and the error codes returned by Connector/ODBC when a fault
occurs.
20.1.6.1. Connector/ODBC API Reference
This section summarizes ODBC routines, categorized by
functionality.
For the complete ODBC API reference, please refer to the ODBC
Programmer's Reference at
http://msdn.microsoft.com/en-us/library/ms714177.aspx.
An application can call SQLGetInfo function
to obtain conformance information about Connector/ODBC. To
obtain information about support for a specific function in the
driver, an application can call
SQLGetFunctions.
Note
For backward compatibility, the Connector/ODBC 3.51 driver
supports all deprecated functions.
The following tables list Connector/ODBC API calls grouped by
task:
Connecting to a data source
Obtaining information about a driver and
data source
Setting and retrieving driver
attributes
Preparing SQL requests
Submitting requests
Retrieving results and information about
results
Retrieving error or diagnostic
information
Obtaining information about the data
source's system tables (catalog functions) item
Performing transactions
Terminating a statement
Terminating a connection
20.1.6.2. Connector/ODBC Data Types
The following table illustrates how driver maps the server data
types to default SQL and C data types.
20.1.6.3. Connector/ODBC Error Codes
The following tables lists the error codes returned by the
driver apart from the server errors.
20.1.7. Connector/ODBC Notes and Tips
Here are some common notes and tips for using Connector/ODBC
within different environments, applications and tools. The notes
provided here are based on the experiences of Connector/ODBC
developers and users.
20.1.7.1. Connector/ODBC General Functionality
This section provides help with common queries and areas of
functionality in MySQL and how to use them with Connector/ODBC.
20.1.7.1.1. Obtaining Auto-Increment Values
Obtaining the value of column that uses
AUTO_INCREMENT after an
INSERT statement can be
achieved in a number of different ways. To obtain the value
immediately after an INSERT,
use a SELECT query with the
LAST_INSERT_ID() function.
For example, using Connector/ODBC you would execute two
separate statements, the INSERT
statement and the SELECT query
to obtain the auto-increment value.
INSERT INTO tbl (auto,text) VALUES(NULL,'text');
SELECT LAST_INSERT_ID();
If you do not require the value within your application, but
do require the value as part of another
INSERT, the entire process can
be handled by executing the following statements:
INSERT INTO tbl (auto,text) VALUES(NULL,'text');
INSERT INTO tbl2 (id,text) VALUES(LAST_INSERT_ID(),'text');
Certain ODBC applications (including Delphi and Access) may
have trouble obtaining the auto-increment value using the
previous examples. In this case, try the following statement
as an alternative:
SELECT * FROM tbl WHERE auto IS NULL;
See Section 20.9.10.3, “How to Get the Unique ID for the Last Inserted Row”.
20.1.7.1.2. Dynamic Cursor Support
Support for the dynamic cursor is provided
in Connector/ODBC 3.51, but dynamic cursors are not enabled by
default. You can enable this function within Windows by
selecting the Enable Dynamic Cursor
checkbox within the ODBC Data Source Administrator.
On other platforms, you can enable the dynamic cursor by
adding 32 to the OPTION
value when creating the DSN.
20.1.7.1.3. Connector/ODBC Performance
The Connector/ODBC driver has been optimized to provide very
fast performance. If you experience problems with the
performance of Connector/ODBC, or notice a large amount of
disk activity for simple queries, there are a number of
aspects you should check:
Ensure that ODBC Tracing is not
enabled. With tracing enabled, a lot of information is
recorded in the tracing file by the ODBC Manager. You can
check, and disable, tracing within Windows using the
Tracing panel of the ODBC Data
Source Administrator. Within Mac OS X, check the
Tracing panel of ODBC
Administrator. See
Section 20.1.4.8, “Getting an ODBC Trace File”.
Make sure you are using the standard version of the
driver, and not the debug version. The debug version
includes additional checks and reporting measures.
Disable the Connector/ODBC driver trace and query logs.
These options are enabled for each DSN, so make sure to
examine only the DSN that you are using in your
application. Within Windows, you can disable the
Connector/ODBC and query logs by modifying the DSN
configuration. Within Mac OS X and Unix, ensure that the
driver trace (option value 4) and query logging (option
value 524288) are not enabled.
20.1.7.2. Connector/ODBC Application Specific Tips
Most programs should work with Connector/ODBC, but for each of
those listed here, there are specific notes and tips to improve
or enhance the way you work with Connector/ODBC and these
applications.
With all applications you should ensure that you are using the
latest Connector/ODBC drivers, ODBC Manager and any supporting
libraries and interfaces used by your application. For example,
on Windows, using the latest version of Microsoft Data Access
Components (MDAC) will improve the compatibility with ODBC in
general, and with the Connector/ODBC driver.
20.1.7.2.1. Using Connector/ODBC with Microsoft Applications
The majority of Microsoft applications have been tested with
Connector/ODBC, including Microsoft Office, Microsoft Access
and the various programming languages supported within ASP and
Microsoft Visual Studio.
20.1.7.2.1.1. Microsoft Access
To improve the integration between Microsoft Access and
MySQL through Connector/ODBC:
For all versions of Access, you should enable the
Connector/ODBC Return matching rows
option. For Access 2.0, you should additionally enable
the Simulate ODBC 1.0 option.
You should have a
TIMESTAMP column in all
tables that you want to be able to update. For maximum
portability, do not use a length specification in the
column declaration (which is unsupported within MySQL in
versions earlier than 4.1).
You should have a primary key in each MySQL table you
want to use with Access. If not, new or updated rows may
show up as #DELETED#.
Use only DOUBLE float
fields. Access fails when comparing with
single-precision floats. The symptom usually is that new
or updated rows may show up as
#DELETED# or that you cannot find or
update rows.
If you are using Connector/ODBC to link to a table that
has a BIGINT column, the
results are displayed as #DELETED#.
The work around solution is:
Have one more dummy column with
TIMESTAMP as the data
type.
Select the Change BIGINT columns to
INT option in the connection dialog in
ODBC DSN Administrator.
Delete the table link from Access and re-create it.
Old records may still display as
#DELETED#, but newly added/updated
records are displayed properly.
If you still get the error Another user has
changed your data after adding a
TIMESTAMP column, the
following trick may help you:
Do not use a table data sheet view.
Instead, create a form with the fields you want, and use
that form data sheet view. You should
set the DefaultValue property for the
TIMESTAMP column to
NOW(). It may be a good
idea to hide the
TIMESTAMP column from
view so your users are not confused.
In some cases, Access may generate SQL statements that
MySQL cannot understand. You can fix this by selecting
"Query|SQLSpecific|Pass-Through" from
the Access menu.
On Windows NT, Access reports
BLOB columns as
OLE OBJECTS. If you want to have
MEMO columns instead, you should
change BLOB columns to
TEXT with
ALTER TABLE.
Access cannot always handle the MySQL
DATE column properly. If
you have a problem with these, change the columns to
DATETIME.
If you have in Access a column defined as
BYTE, Access tries to export this as
TINYINT instead of
TINYINT UNSIGNED. This gives you
problems if you have values larger than 127 in the
column.
If you have very large (long) tables in Access, it might
take a very long time to open them. Or you might run low
on virtual memory and eventually get an ODBC
Query Failed error and the table cannot open.
To deal with this, select the following options:
Return Matching Rows (2)
Allow BIG Results (8).
These add up to a value of 10
(OPTION=10).
Some external articles and tips that may be useful when
using Access, ODBC and Connector/ODBC:
MySQL Enterprise
MySQL Enterprise subscribers will find more information
about using ODBC with Access in Knowledge Base articles
such as
Use
MySQL-Specific Syntax with Microsoft Access. To
subscribe to MySQL Enterprise see
http://www.mysql.com/products/enterprise/advisors.html.
20.1.7.2.1.2. Microsoft Excel and Column Types
If you have problems importing data into Microsoft Excel,
particularly numerical, date, and time values, this is
probably because of a bug in Excel, where the column type of
the source data is used to determine the data type when that
data is inserted into a cell within the worksheet. The
result is that Excel incorrectly identifies the content and
this affects both the display format and the data when it is
used within calculations.
To address this issue, use the
CONCAT() function in your
queries. The use of CONCAT()
forces Excel to treat the value as a string, which Excel
will then parse and usually correctly identify the embedded
information.
However, even with this option, some data may be incorrectly
formatted, even though the source data remains unchanged.
Use the Format Cells option within Excel
to change the format of the displayed information.
20.1.7.2.1.3. Microsoft Visual Basic
To be able to update a table, you must define a primary key
for the table.
Visual Basic with ADO cannot handle big integers. This means
that some queries like SHOW
PROCESSLIST do not work properly. The fix is to
use OPTION=16384 in the ODBC connect
string or to select the Change BIGINT columns to
INT option in the Connector/ODBC connect screen.
You may also want to select the Return matching
rows option.
MySQL Enterprise
MySQL Enterprise subscribers can find a discussion about
using VBA in the Knowledge Base article,
MySQL-Specific Syntax with VBA. To subscribe to
MySQL Enterprise see
http://www.mysql.com/products/enterprise/advisors.html.
20.1.7.2.1.4. Microsoft Visual InterDev
If you have a BIGINT in your
result, you may get the error [Microsoft][ODBC
Driver Manager] Driver does not support this
parameter. Try selecting the Change
BIGINT columns to INT option in the Connector/ODBC
connect screen.
20.1.7.2.1.5. Visual Objects
You should select the Don't optimize column
widths option.
20.1.7.2.1.6. Microsoft ADO
When you are coding with the ADO API and Connector/ODBC, you
need to pay attention to some default properties that aren't
supported by the MySQL server. For example, using the
CursorLocation Property as
adUseServer returns a result of –1
for the RecordCount Property. To have the
right value, you need to set this property to
adUseClient, as shown in the VB code
here:
Dim myconn As New ADODB.Connection
Dim myrs As New Recordset
Dim mySQL As String
Dim myrows As Long
myconn.Open "DSN=MyODBCsample"
mySQL = "SELECT * from user"
myrs.Source = mySQL
Set myrs.ActiveConnection = myconn
myrs.CursorLocation = adUseClient
myrs.Open
myrows = myrs.RecordCount
myrs.Close
myconn.Close
Another workaround is to use a SELECT
COUNT(*) statement for a similar query to get the
correct row count.
To find the number of rows affected by a specific SQL
statement in ADO, use the RecordsAffected
property in the ADO execute method. For more information on
the usage of execute method, refer to
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdmthcnnexecute.asp.
For information, see
ActiveX
Data Objects(ADO) Frequently Asked Questions.
20.1.7.2.1.8. Using Connector/ODBC with Visual Basic (ADO, DAO and RDO) and ASP
Some articles that may help with Visual Basic and ASP:
20.1.7.2.2. Using Connector/ODBC with Borland Applications
With all Borland applications where the Borland Database
Engine (BDE) is used, follow these steps to improve
compatibility:
Update to BDE 3.2 or newer.
Enable the Don't optimize column widths
option in the DSN.
Enabled the Return matching rows option
in the DSN.
20.1.7.2.2.1. Using Connector/ODBC with Borland Builder 4
When you start a query, you can use the
Active property or the
Open method. Note that
Active starts by automatically issuing a
SELECT * FROM ... query. That may not be
a good thing if your tables are large.
20.1.7.2.2.2. Using Connector/ODBC with Delphi
Also, here is some potentially useful Delphi code that sets
up both an ODBC entry and a BDE entry for Connector/ODBC.
The BDE entry requires a BDE Alias Editor that is free at a
Delphi Super Page near you. (Thanks to Bryan Brunton
<bryan@flesherfab.com> for this):
fReg:= TRegistry.Create;
fReg.OpenKey('\Software\ODBC\ODBC.INI\DocumentsFab', True);
fReg.WriteString('Database', 'Documents');
fReg.WriteString('Description', ' ');
fReg.WriteString('Driver', 'C:\WINNT\System32\myodbc.dll');
fReg.WriteString('Flag', '1');
fReg.WriteString('Password', '');
fReg.WriteString('Port', ' ');
fReg.WriteString('Server', 'xmark');
fReg.WriteString('User', 'winuser');
fReg.OpenKey('\Software\ODBC\ODBC.INI\ODBC Data Sources', True);
fReg.WriteString('DocumentsFab', 'MySQL');
fReg.CloseKey;
fReg.Free;
Memo1.Lines.Add('DATABASE NAME=');
Memo1.Lines.Add('USER NAME=');
Memo1.Lines.Add('ODBC DSN=DocumentsFab');
Memo1.Lines.Add('OPEN MODE=READ/WRITE');
Memo1.Lines.Add('BATCH COUNT=200');
Memo1.Lines.Add('LANGDRIVER=');
Memo1.Lines.Add('MAX ROWS=-1');
Memo1.Lines.Add('SCHEMA CACHE DIR=');
Memo1.Lines.Add('SCHEMA CACHE SIZE=8');
Memo1.Lines.Add('SCHEMA CACHE TIME=-1');
Memo1.Lines.Add('SQLPASSTHRU MODE=SHARED AUTOCOMMIT');
Memo1.Lines.Add('SQLQRYMODE=');
Memo1.Lines.Add('ENABLE SCHEMA CACHE=FALSE');
Memo1.Lines.Add('ENABLE BCD=FALSE');
Memo1.Lines.Add('ROWSET SIZE=20');
Memo1.Lines.Add('BLOBS TO CACHE=64');
Memo1.Lines.Add('BLOB SIZE=32');
AliasEditor.Add('DocumentsFab','MySQL',Memo1.Lines);
20.1.7.2.2.3. Using Connector/ODBC with C++ Builder
Tested with BDE 3.0. The only known problem is that when the
table schema changes, query fields are not updated. BDE,
however, does not seem to recognize primary keys, only the
index named PRIMARY, although this has
not been a problem.
20.1.7.2.3. Using Connector/ODBC with ColdFusion
The following information is taken from the ColdFusion
documentation:
Use the following information to configure ColdFusion Server
for Linux to use the unixODBC driver with
Connector/ODBC for MySQL data sources. You can download
Connector/ODBC at
http://dev.mysql.com/downloads/connector/odbc/.
ColdFusion version 4.5.1 allows you to us the ColdFusion
Administrator to add the MySQL data source. However, the
driver is not included with ColdFusion version 4.5.1. Before
the MySQL driver appears in the ODBC data sources drop-down
list, you must build and copy the Connector/ODBC driver to
/opt/coldfusion/lib/libmyodbc.so.
The Contrib directory contains the program
mydsn-xxx.zip
which allows you to build and remove the DSN registry file for
the Connector/ODBC driver on ColdFusion applications.
For more information and guides on using ColdFusion and
Connector/ODBC, see the following external sites:
20.1.7.2.6. Using Connector/ODBC with Pervasive Software DataJunction
You have to change it to output
VARCHAR rather than
ENUM, as it exports the latter
in a manner that causes MySQL problems.
20.1.7.2.7. Using Connector/ODBC with SunSystems Vision
You should select the Return matching rows
option.
20.1.7.3. Connector/ODBC Errors and Resolutions (FAQ)
The following section details some common errors and their
suggested fix or alternative solution. If you are still
experiencing problems, use the Connector/ODBC mailing list; see
Section 20.1.8.1, “Connector/ODBC Community Support”.
Many problems can be resolved by upgrading your Connector/ODBC
drivers to the latest available release. On Windows, you should
also make sure that you have the latest versions of the
Microsoft Data Access Components (MDAC) installed.
Questions 20.1.7.3.1:
I have installed Connector/ODBC on Windows XP x64 Edition
or Windows Server 2003 R2 x64. The installation completed
successfully, but the Connector/ODBC driver does not
appear in ODBC Data Source
Administrator.
20.1.7.3.2:
When connecting or using the Test
button in ODBC Data Source
Administrator I get error 10061 (Cannot connect
to server)
20.1.7.3.3:
The following error is reported when using transactions:
Transactions are not enabled
20.1.7.3.4:
Access reports records as #DELETED#
when inserting or updating records in linked tables.
20.1.7.3.5:
How do I handle Write Conflicts or Row Location errors?
20.1.7.3.6:
Exporting data from Access 97 to MySQL reports a
Syntax Error.
20.1.7.3.7:
Exporting data from Microsoft DTS to MySQL reports a
Syntax Error.
20.1.7.3.8:
Using ODBC.NET with Connector/ODBC, while fetching empty
string (0 length), it starts giving the SQL_NO_DATA
exception.
20.1.7.3.9:
Using SELECT COUNT(*) FROM
tbl_name within
Visual Basic and ASP returns an error.
20.1.7.3.10:
Using the AppendChunk() or
GetChunk() ADO methods, the
Multiple-step operation generated errors. Check
each status value error is returned.
20.1.7.3.11:
Access Returns Another user had modified the
record that you have modified while editing
records on a Linked Table.
20.1.7.3.12:
When linking an application directly to the Connector/ODBC
library under Unix/Linux, the application crashes.
20.1.7.3.13:
Applications in the Microsoft Office suite are unable to
update tables that have
DATE or
TIMESTAMP columns.
20.1.7.3.14:
When connecting Connector/ODBC 5.x (Beta) to a MySQL 4.x
server, the error 1044 Access denied for user
'xxx'@'%' to database 'information_schema' is
returned.
20.1.7.3.15:
When calling SQLTables, the error
S1T00 is returned, but I cannot find
this in the list of error numbers for Connector/ODBC.
20.1.7.3.16:
When linking to tables in Access 2000 and generating links
to tables programmatically, rather than through the table
designer interface, you may get errors about tables not
existing.
20.1.7.3.17:
When I try to use batched statements, the excution of the
batched statements fails.
20.1.7.3.18:
When connecting to a MySQL server using ADODB and Excel,
occasionally the application fails to communicate with the
server and the error Got an error reading
communication packets appears in the error log.
20.1.7.3.19:
When using some applications to access a MySQL server
using C/ODBC and outer joins, an error is reported
regarding the Outer Join Escape Sequence.
20.1.7.3.20:
I can correctly store extended characters in the database
(Hebrew/CJK) using C/ODBC 5.1, but when I retrieve the
data, the text is not formatted correctly and I get
garbled characters.
20.1.7.3.21:
I have a duplicate MySQL Connector/ODBC entry within my
Installed Programs list, but I cannot
delete one of them.
20.1.7.3.22:
When submitting queries with parameter binding using
UPDATE, my field values are
being truncated to 255 characters.
20.1.7.3.23:
Is it possible to disable data-at-execution using a flag?
Questions and Answers 20.1.7.3.1:
I have installed Connector/ODBC on Windows XP x64 Edition
or Windows Server 2003 R2 x64. The installation completed
successfully, but the Connector/ODBC driver does not
appear in ODBC Data Source
Administrator.
This is not a bug, but is related to the way Windows x64
editions operate with the ODBC driver. On Windows x64
editions, the Connector/ODBC driver is installed in the
%SystemRoot%\SysWOW64 folder.
However, the default ODBC Data Source
Administrator that is available through the
Administrative Tools or
Control Panel in Windows x64 Editions
is located in the
%SystemRoot%\system32 folder, and
only searches this folder for ODBC drivers.
On Windows x64 editions, you should use the ODBC
administration tool located at
%SystemRoot%\SysWOW64\odbcad32.exe,
this will correctly locate the installed Connector/ODBC
drivers and enable you to create a Connector/ODBC DSN.
This issue was originally reported as Bug#20301.
20.1.7.3.2:
When connecting or using the Test
button in ODBC Data Source
Administrator I get error 10061 (Cannot connect
to server)
This error can be raised by a number of different issues,
including server problems, network problems, and firewall
and port blocking problems. For more information, see
Section B.1.2.2, “Can't connect to [local] MySQL server”.
20.1.7.3.3:
The following error is reported when using transactions:
Transactions are not enabled
This error indicates that you are trying to use
transactions with a MySQL table that does not support
transactions. Transactions are supported within MySQL when
using the InnoDB database engine. In
versions of MySQL before Mysql 5.1 you may also use the
BDB engine.
You should check the following before continuing:
Verify that your MySQL server supports a transactional
database engine. Use SHOW
ENGINES to obtain a list of the available
engine types.
Verify that the tables you are updating use a
transaction database engine.
Ensure that you have not enabled the disable
transactions option in your DSN.
20.1.7.3.4:
Access reports records as #DELETED#
when inserting or updating records in linked tables.
If the inserted or updated records are shown as
#DELETED# in the access, then:
If you are using Access 2000, you should get and
install the newest (version 2.6 or higher) Microsoft
MDAC (Microsoft Data Access
Components) from
http://support.microsoft.com/kb/110093.
This fixes a bug in Access that when you export data
to MySQL, the table and column names aren't specified.
You should also get and apply the Microsoft Jet 4.0
Service Pack 5 (SP5) which can be found at
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q239114.
This fixes some cases where columns are marked as
#DELETED# in Access.
For all versions of Access, you should enable the
Connector/ODBC Return matching rows
option. For Access 2.0, you should additionally enable
the Simulate ODBC 1.0 option.
You should have a timestamp in all tables that you
want to be able to update.
You should have a primary key in the table. If not,
new or updated rows may show up as
#DELETED#.
Use only DOUBLE float
fields. Access fails when comparing with
single-precision floats. The symptom usually is that
new or updated rows may show up as
#DELETED# or that you cannot find
or update rows.
If you are using Connector/ODBC to link to a table
that has a BIGINT
column, the results are displayed as
#DELETED. The work around solution
is:
Have one more dummy column with
TIMESTAMP as the
data type.
Select the Change BIGINT columns to
INT option in the connection dialog in
ODBC DSN Administrator.
Delete the table link from Access and re-create
it.
Old records still display as
#DELETED#, but newly added/updated
records are displayed properly.
20.1.7.3.5:
How do I handle Write Conflicts or Row Location errors?
If you see the following errors, select the
Return Matching Rows option in the DSN
configuration dialog, or specify
OPTION=2, as the connection parameter:
Write Conflict. Another user has changed your data.
Row cannot be located for updating. Some values may have been changed
since it was last read.
20.1.7.3.6:
Exporting data from Access 97 to MySQL reports a
Syntax Error.
This error is specific to Access 97 and versions of
Connector/ODBC earlier than 3.51.02. Update to the latest
version of the Connector/ODBC driver to resolve this
problem.
20.1.7.3.7:
Exporting data from Microsoft DTS to MySQL reports a
Syntax Error.
This error occurs only with MySQL tables using the
TEXT or
VARCHAR data types. You can
fix this error by upgrading your Connector/ODBC driver to
version 3.51.02 or higher.
20.1.7.3.8:
Using ODBC.NET with Connector/ODBC, while fetching empty
string (0 length), it starts giving the SQL_NO_DATA
exception.
You can get the patch that addresses this problem from
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q319243.
20.1.7.3.9:
Using SELECT COUNT(*) FROM
tbl_name within
Visual Basic and ASP returns an error.
This error occurs because the
COUNT(*) expression is
returning a BIGINT, and ADO
cannot make sense of a number this big. Select the
Change BIGINT columns to INT option
(option value 16384).
20.1.7.3.10:
Using the AppendChunk() or
GetChunk() ADO methods, the
Multiple-step operation generated errors. Check
each status value error is returned.
The GetChunk() and
AppendChunk() methods from ADO
doesn't work as expected when the cursor location is
specified as adUseServer. On the other
hand, you can overcome this error by using
adUseClient.
A simple example can be found from
http://www.dwam.net/iishelp/ado/docs/adomth02_4.htm
20.1.7.3.11:
Access Returns Another user had modified the
record that you have modified while editing
records on a Linked Table.
In most cases, this can be solved by doing one of the
following things:
Add a primary key for the table if one doesn't exist.
Add a timestamp column if one doesn't exist.
Only use double-precision float fields. Some programs
may fail when they compare single-precision floats.
If these strategies do not help, you should start by
making a log file from the ODBC manager (the log you get
when requesting logs from ODBCADMIN) and a Connector/ODBC
log to help you figure out why things go wrong. For
instructions, see
Section 20.1.4.8, “Getting an ODBC Trace File”.
20.1.7.3.12:
When linking an application directly to the Connector/ODBC
library under Unix/Linux, the application crashes.
Connector/ODBC 3.51 under Unix/Linux is not compatible
with direct application linking. You must use a driver
manager, such as iODBC or unixODBC to connect to an ODBC
source.
20.1.7.3.13:
Applications in the Microsoft Office suite are unable to
update tables that have
DATE or
TIMESTAMP columns.
This is a known issue with Connector/ODBC. You must ensure
that the field has a default value (rather than
NULL and that the default value is
nonzero (that is, the default value is not
0000-00-00 00:00:00).
20.1.7.3.14:
When connecting Connector/ODBC 5.x (Beta) to a MySQL 4.x
server, the error 1044 Access denied for user
'xxx'@'%' to database 'information_schema' is
returned.
Connector/ODBC 5.x is designed to work with MySQL 5.0 or
later, taking advantage of the
INFORMATION_SCHEMA database to
determine data definition information. Support for MySQL
4.1 is planned for the final release.
20.1.7.3.15:
When calling SQLTables, the error
S1T00 is returned, but I cannot find
this in the list of error numbers for Connector/ODBC.
The S1T00 error indicates that a
general timeout has occurred within the ODBC system and is
not a MySQL error. Typically it indicates that the
connection you are using is stale, the server is too busy
to accept your request or that the server has gone away.
20.1.7.3.16:
When linking to tables in Access 2000 and generating links
to tables programmatically, rather than through the table
designer interface, you may get errors about tables not
existing.
There is a known issue with a specific version of the
msjet40.dll that exhibits this issue.
The version affected is 4.0.9025.0. Reverting to an older
version will enable you to create the links. If you have
recently updated your version, check your
WINDOWS directory for the older
version of the file and copy it to the drivers directory.
20.1.7.3.17:
When I try to use batched statements, the excution of the
batched statements fails.
Batched statement support was added in 3.51.18. Support
for batched statements is not enabled by default. You must
enable option FLAG_MULTI_STATEMENTS,
value 67108864, or select the Allow multiple
statements flag within a GUI configuration.
20.1.7.3.18:
When connecting to a MySQL server using ADODB and Excel,
occasionally the application fails to communicate with the
server and the error Got an error reading
communication packets appears in the error log.
This error may be related to Keyboard Logger 1.1 from
PanteraSoft.com, which is known to interfere with the
network communication between MySQL Connector/ODBC and
MySQL.
20.1.7.3.19:
When using some applications to access a MySQL server
using C/ODBC and outer joins, an error is reported
regarding the Outer Join Escape Sequence.
This is a known issue with MySQL Connector/ODBC which is
not correctly parsing the "Outer Join Escape Sequence", as
per the specs at
Microsoft
ODBC Specs. Currently, Connector/ODBC will return
value > 0 when asked for
SQL_OJ_CAPABILITIES even though no
parsing takes place in the driver to handle the outer join
escape sequence.
20.1.7.3.20:
I can correctly store extended characters in the database
(Hebrew/CJK) using C/ODBC 5.1, but when I retrieve the
data, the text is not formatted correctly and I get
garbled characters.
When using ASP and UTF8 characters you should add the
following to your ASP files to ensure that the data
returned is correctly encoded:
Response.CodePage = 65001
Response.CharSet = "utf-8" 20.1.7.3.21:
I have a duplicate MySQL Connector/ODBC entry within my
Installed Programs list, but I cannot
delete one of them.
This problem can occur when you upgrade an existing
Connector/ODBC installation, rather than removing and then
installing the updated version.
Warning
To fix the problem you should use any working
uninstallers to remove existing installations and then
may have to edit the contents of the registry. Make sure
you have a backup of your registry information before
attempting any editing of the registry contents.
20.1.7.3.22:
When submitting queries with parameter binding using
UPDATE, my field values are
being truncated to 255 characters.
You should ensure that the
FLAG_BIG_PACKETS option is set for your
connection. This removes the 255 character limitation on
bound parameters.
20.1.7.3.23:
Is it possible to disable data-at-execution using a flag?
If you do not wish to use data-at-execution, simply remove
the corresponding calls. For example:
SQLLEN ylen = SQL_LEN_DATA_AT_EXEC(10);
SQLBindCol(hstmt,2,SQL_C_BINARY, buf, 10, &ylen);
Would become:
SQLBindCol(hstmt,2,SQL_C_BINARY, buf, 10, NULL);
Note that in the call to SQLBindCol(),
&ylen has been replaced by NULL.
For further information please refer to the
MSDN
documentation for SQLBindCol().
20.1.8. Connector/ODBC Support
There are many different places where you can get support for
using Connector/ODBC. You should always try the Connector/ODBC
Mailing List or Connector/ODBC Forum. See
Section 20.1.8.1, “Connector/ODBC Community Support”, for help
before reporting a specific bug or issue to MySQL.
20.1.8.2. How to Report Connector/ODBC Problems or Bugs
If you encounter difficulties or problems with Connector/ODBC,
you should start by making a log file from the ODBC
Manager (the log you get when requesting logs from
ODBC ADMIN) and Connector/ODBC. The procedure
for doing this is described in
Section 20.1.4.8, “Getting an ODBC Trace File”.
Check the Connector/ODBC trace file to find out what could be
wrong. You should be able to determine what statements were
issued by searching for the string
>mysql_real_query in the
myodbc.log file.
You should also try issuing the statements from the
mysql client program or from
admndemo. This helps you determine whether
the error is in Connector/ODBC or MySQL.
If you find out something is wrong, please only send the
relevant rows (maximum 40 rows) to the myodbc
mailing list. See Section 1.5.1, “MySQL Mailing Lists”. Please never
send the whole Connector/ODBC or ODBC log file!
You should ideally include the following information with the
email:
Operating system and version
Connector/ODBC version
ODBC Driver Manager type and version
MySQL server version
ODBC trace from Driver Manager
Connector/ODBC log file from Connector/ODBC driver
Simple reproducible sample
Remember that the more information you can supply to us, the
more likely it is that we can fix the problem!
Also, before posting the bug, check the MyODBC mailing list
archive at http://lists.mysql.com/myodbc.
If you are unable to find out what is wrong, the last option is
to create an archive in tar or Zip format
that contains a Connector/ODBC trace file, the ODBC log file,
and a README file that explains the
problem. You can send this to ftp://ftp.mysql.com/pub/mysql/upload/.
Only MySQL engineers have access to the files you upload, and we
are very discreet with the data.
If you can create a program that also demonstrates the problem,
please include it in the archive as well.
If the program works with another SQL server, you should include
an ODBC log file where you perform exactly the same SQL
statements so that we can compare the results between the two
systems.
Remember that the more information you can supply to us, the
more likely it is that we can fix the problem.
20.1.8.3. How to Submit a Connector/ODBC Patch
You can send a patch or suggest a better solution for any
existing code or problems by sending a mail message to
<myodbc@lists.mysql.com>.
These are the developers that have worked on the Connector/ODBC
and Connector/ODBC 3.51 Drivers from MySQL AB.
Michael (Monty) Widenius
Venu Anuganti
Peter Harvey
20.2. MySQL Connector/NET
Connector/NET enables developers to easily create .NET applications
that require secure, high-performance data connectivity with MySQL.
It implements the required ADO.NET interfaces and integrates into
ADO.NET aware tools. Developers can build applications using their
choice of .NET languages. Connector/NET is a fully managed ADO.NET
driver written in 100% pure C#.
Connector/NET includes full support for:
MySQL 6.0 features
MySQL 5.1 features
MySQL 5.0 features (such as stored procedures)
MySQL 4.1 features (server-side prepared statements, Unicode,
and shared memory access, and so forth)
Large-packet support for sending and receiving rows and BLOBs up
to 2 gigabytes in size.
Protocol compression which allows for compressing the data
stream between the client and server.
Support for connecting using TCP/IP sockets, named pipes, or
shared memory on Windows.
Support for connecting using TCP/IP sockets or Unix sockets on
Unix.
Support for the Open Source Mono framework developed by Novell.
Fully managed, does not utilize the MySQL client library.
This document is intended as a user's guide to Connector/NET and
includes a full syntax reference. Syntax information is also
included within the Documentation.chm file
included with the Connector/NET distribution.
If you are using MySQL 5.0 or later, and Visual Studio as your
development environment, you may want also want to use the MySQL
Visual Studio Plugin. The plugin acts as a DDEX (Data Designer
Extensibility) provider, enabling you to use the data design tools
within Visual Studio to manipulate the schema and objects within a
MySQL database. For more information, see
Section 20.2.3, “Visual Studio User Guide”.
Note
Connector/NET 5.1.2 and later include the Visual Studio Plugin by
default.
Key topics:
20.2.1. Connector/NET Versions
There are several versions of Connector/NET available:
Connector/NET 1.0 includes support for MySQL 4.0, and MySQL 5.0
features, and full compatibility with the ADO.NET driver
interface.
Connector/NET 5.0 includes support for MySQL 4.0, MySQL 4.1,
MySQL 5.0 and MySQL 5.1 features. Connector/NET 5.0 also
includes full support for the ADO.Net 2.0 interfaces and
subclasses, includes support for the usage advisor and
performance monitor (PerfMon) hooks.
Connector/NET 5.1 includes support for MySQL 4.0, MySQL 5.0,
MySQL 5.1 and MySQL 6.0 (Falcon Preview) features. Connector/NET
5.1 also includes support for a new membership/role provider,
Compact Framework 2.0, a new stored procedure parser and
improvements to GetSchema. Connector/NET 5.1
also includes the Visual Studio Plugin as a standard installable
component.
Connector/NET 5.2 includes support for MySQL 4.0, MySQL 5.0,
MySQL 5.1 and MySQL 6.0 (Falcon Preview) features. Connector/NET
5.2 also includes support for a new membership/role provider,
Compact Framework 2.0, a new stored procedure parser and
improvements to GetSchema. Connector/NET 5.2
also includes the Visual Studio Plugin as a standard installable
component.
Connector/NET 6.0 includes support for MySQL 4.0, MySQL 5.0,
MySQL 5.1 and MySQL 6.0. Connector/NET 6.0 is currently
available as an Alpha release.
The latest source code for Connector/NET can be downloaded from the
MySQL public Subversion server. For further details see
Section 20.2.2.3, “Installing Connector/NET from the source code”.
The following table shows the .NET Framework version required, and
MySQL Server version supported by Connector/NET:
Note
Version numbers for MySQL products are formatted as X.X.X.
However, Windows tools (Control Panel, properties display) may
show the version numbers as XX.XX.XX. For example, the official
MySQL formatted version number 5.0.9 may be displayed by Windows
tools as 5.00.09. The two versions are the same; only the number
display format is different.
20.2.2. Connector/NET Installation
Connector/NET runs on any platform that supports the .NET framework.
The .NET framework is primarily supported on recent versions of
Microsoft Windows, and is supported on Linux through the Open Source
Mono framework (see http://www.mono-project.com).
Connector/NET is available for download from
http://dev.mysql.com/downloads/connector/net/5.2.html.
20.2.2.1. Installing Connector/NET on Windows
On Windows, installation is supported either through a binary
installation process or by downloading a Zip file with the
Connector/NET components.
Before installing, you should ensure that your system is up to
date, including installing the latest version of the .NET
Framework.
20.2.2.1.1. Installing Connector/NET using the Installer
Using the installer is the most straightforward method of
installing Connector/NET on Windows and the installed components
include the source code, test code and full reference
documentation.
Connector/NET is installed through the use of a Windows
Installer (.msi) installation package, which
can be used to install Connector/NET on all Windows operating
systems. The MSI package in contained within a ZIP archive named
mysql-connector-net-version.zip,
where version indicates the
Connector/NET version.
To install Connector/NET:
Double click on the MSI installer file extracted from the
Zip you downloaded. Click Next to
start the installation.
You must choose the type of installation that you want to
perform.
For most situations, the Typical installation will be
suitable. Click the Typical button
and proceed to Step 5. A Complete installation installs all
the available files. To conduct a Complete installation,
click the Complete button and proceed
to step 5. If you want to customize your installation,
including choosing the components to install and some
installation options, click the
Custom button and proceed to Step 3.
The Connector/NET installer will register the connector
within the Global Assembly Cache (GAC) - this will make the
Connector/NET component available to all applications, not
just those where you explicitly reference the Connector/NET
component. The installer will also create the necessary
links in the Start menu to the documentation and release
notes.
If you have chosen a custom installation, you can select the
individual components that you want to install, including
the core interface component, supporting documentation (a
CHM file) samples and examples and the source code. Select
the items, and their installation level, and then click
Next to continue the installation.
Note
For Connector/NET 1.0.8 or lower and Connector 5.0.4 and
lower the installer will attempt to install binaries for
both 1.x and 2.x of the .NET Framework. If you only have
one version of the framework installed, the connector
installation may fail. If this happens, you can choose the
framework version to be installed through the custom
installation step.
You will be given a final opportunity to confirm the
installation. Click Install to copy
and install the files onto your machine.
Once the installation has been completed, click
Finish to exit the installer.
Unless you choose otherwise, Connector/NET is installed in
C:\Program Files\MySQL\MySQL Connector Net
X.X.X, where
X.X.X is replaced with the version of
Connector/NET you are installing. New installations do not
overwrite existing versions of Connector/NET.
Depending on your installation type, the installed components
will include some or all of the following components:
bin - Connector/NET MySQL libraries for
different versions of the .NET environment.
docs - contains a CHM of the
Connector/NET documentation.
samples - sample code and applications
that use the Connector/NET component.
src - the source code for the
Connector/NET component.
You may also use the /quiet or
/q command-line option with the
msiexec tool to install the Connector/NET
package automatically (using the default options) with no
notification to the user. Using this method the user cannot
select options. Additionally, no prompts, messages or dialog
boxes will be displayed.
C:\> msiexec /package conector-net.msi /quiet
To provide a progress bar to the user during automatic
installation, use the /passive option.
20.2.2.1.2. Installing Connector/NET using the Zip packages
If you are having problems running the installer, you can
download a Zip file without an installer as an alternative. That
file is called
mysql-connector-net-version-noinstall.zip.
Once downloaded, you can extract the files to a location of your
choice.
The file contains the following directories:
bin - Connector/NET MySQL libraries for
different versions of the .NET environment.
Docs - contains a CHM of the
Connector/NET documentation.
Samples - sample code and applications
that use the Connector/NET component.
Connector/NET 6.0.x has a different directory structure:
Assemblies - contains a collection of
DLLs that make up the connector functionality.
Documentation - contains the
Connector/NET documentation as a CHM file.
Samples - sample code and applications
that use the Connector/NET component.
There is also another Zip file available for download called
mysql-connector-net-version-src.zip.
This file contains the source code distribution.
The file contains the following directories:
Documentation - This folder contains
the source files to build the documentation into the
compiled HTML (CHM) format.
Installer - This folder contains the
source files to build the Connector/NET installer program.
MySql.Data - This folder contains the
source files for the core data provider.
MySql.VisualStudio - This folder
contains the source files for the Microsoft Visual Studio
extensions.
MySql.Web - This folder contains the
source files for the web providers. This includes code for
the membership provider, role provider and profile provider.
These are used in ASP.NET web sites.
Samples - This folder contains the
source files for several example applications.
Tests - Ths folder contains a
spreadsheet listing test cases.
VisualStudio - Contains resources used
by the Visual Studio plug in.
Finally, you need to ensure that
MySql.Data.dll is accessible to your
program at build time (and run time). If using Microsoft Visual
Studio you will need to add MySql.Data as a
Reference to your project.
20.2.2.2. Installing Connector/NET on Unix with Mono
There is no installer available for installing the Connector/NET
component on your Unix installation. Before installing, please
ensure that you have a working Mono project installation. You can
test whether your system has Mono installed by typing:
shell> mono --version
The version of the Mono JIT compiler will be displayed.
To compile C# source code you will also need to make sure a Mono
C# compiler, is installed. Note that there are two Mono C#
compilers available, mcs, which accesses the
1.0-profile libraries, and gmcs, which acesses
the 2.0-profile libraries.
To install Connector/NET on Unix/Mono:
Download the
mysql-connector-net-version-noinstall.zip
and extract the contents to a directory of your choice, for
example: ~/connector-net/.
In the directory where you unzipped the connector to, change
into the bin directory. Ensure the file
MySql.Data.dll is present.
You must register the Connector/NET component,
MySql.Data, in the Global Assembly Cache
(GAC). In the current directory enter the
gacutil command:
root-shell> gacutil /i MySql.Data.dll
This will register MySql.Data into the GAC.
You can check this by listing the contents of
/usr/lib/mono/gac, where you will find
MySql.Data if the registration has been
successful.
You are now ready to compile your application. You must ensure
that when you compile your application you include the
Connector/NET component using the -r:
command-line option. For example:
shell> gmcs -r:System.dll -r:System.Data.dll -r:MySql.Data.dll HelloWorld.cs
Note, the assemblies that need to be referenced will depend on the
requirements of the application, but applications using
Connector/NET will need to provide -r:MySql.Data
as a minimum.
You can further check your installation by running the compiled
program, for example:
shell> mono HelloWorld.exe 20.2.2.3. Installing Connector/NET from the source codeCaution
You should read this section only if you are interested in
helping us test our new code. If you just want to get
Connector/NET up and running on your system, you should use a
standard release distribution.
Obtaining the source code
To be able to access the Connector/NET source tree, you must have
Subversion installed. Subversion is freely available from
http://subversion.tigris.org/.
The most recent development source tree is available from our
public Subversion trees at
http://dev.mysql.com/tech-resources/sources.html.
To checkout out the Connector/NET sources, change to the directory
where you want the copy of the Connector/NET tree to be stored,
then use the following command:
shell> svn co http://svn.mysql.com/svnpublic/connector-net
Source packages are also available on the downloads page.
Building the source code on
Windows
The following procedure can be used to build the connector on
Microsoft Windows.
Obtain the source code, either from the Subversion server, or
through one of the prepared source code packages.
Navigate to the root of the source code tree.
A Microsoft Visual Studio 2005 solution file is available to
build the connector, this is called
MySQL-VS2005.sln. Click on this file to
load the solution into Visual Studio.
Select , from the main menu to build the solution.
Building the source code on Unix
Support for building Connector/NET on Mono/Unix is currently not
available.
20.2.3. Visual Studio User Guide20.2.3.1. Making a connection
Once the connector is installed, you can use it to create, modify,
and delete connections to MySQL databases. To create a connection
with a MySQL database, perform the following steps:
Start Visual Studio, and open the Server Explorer window
(,
option in the main Visual Studio menu, or
Ctrl+W, L
hot keys).
Right-click on the Data Connections node, and choose the
menu item.
Add Connection dialog opens. Press the
Change button to choose MySQL Database
as a data source.
Change Data Source dialog opens. Choose MySQL Database in the
list of data sources (or the <other>
option, if MySQL Database is absent), and then choose .NET
Framework Data Provider for MySQL in the combo box of data
providers.
Input the connection settings: the server host name (for
example, localhost if the MySQL server is installed on the
local machine), the user name, the password, and the default
schema name. Note that you must specify the default schema
name to open the connection.
You can also set the port to connect with the MySQL server by
pressing the Advanced button. To test
connection with the MySQL server, set the server host name,
the user name, and the password, and press the Test
Connection button. If the test succeeds, the
success confirmation dialog opens.
After you set all settings and test the connection, press
OK. The newly created connection is
displayed in Server Explorer. Now you can work with the MySQL
server through standard Server Explorer GUI.
After the connection is successfully established, all settings are
saved for future use. When you start Visual Studio for the next
time, just open the connection node in Server Explorer to
establish a connection to the MySQL server again.
To modify and delete a connection, use the Server Explorer context
menu for the corresponding node. You can modify any of the
settings just by overwriting the existing values with new ones.
Note that the connection may be modified or deleted only if no
active editor for its objects is opened: otherwise you may loose
your data.
Connector/Net contains a table editor, which enables the visual
creation and modification of tables.
The Table Designer can be accessed through a mouse action on
table-type node of Server Explorer. To create a new table,
right-click on the Tables node (under the
connection node) and choose the
command from the context menu.
To modify an existing table, double-click on the node of the table
you wish to modify, or right-click on this node and choose the
item from the context menu. Either of
the commands opens the Table Designer.
The table editor is implemented in the manner of the well-known
Query Browser Table Editor, but with minor differences.
Table Designer consists of the following parts:
Columns Editor - a data grid on top of the Table Designer. Use
the Columns grid for column creation, modification, and
deletion.
Indexes tab - a tab on bottom of the Table Designer. Use the
Indexes tab for indexes management.
Foreign Keys tab - a tab on bottom of the Table Designer. Use
the Foreign Keys tab for foreign keys management.
Column Details tab - a tab on bottom of the Table Designer.
Use the Column Details tab to set advanced column options.
Properties window - a standard Visual Studio Properties
window, where the properties of the edited table are
displayed. Use the Properties window to set the table
properties.
Each of these areas is discussed in more detail in subsequent
sections.
To save changes you have made in the Table Designer, use either
Save or Save All
button of the Visual Studio main toolbar, or just press
Ctrl+S. If you have not already
named the table you will be prompted to do so.
Once created you can view the table in the Server Explorer.
The Table Designer main menu allows you to set a Primary Key
column, edit Relationships such as Foreign Keys, and create
Indexes.
20.2.3.2.1. Column Editor
You can use the Column Editor to set or change the name, data
type, default value, and other properties of a table column. To
set the focus to a needed cell of a grid, use the mouse click.
Also you can move through the grid using Tab
and Shift+Tab keys.
To set or change the name, data type, default value and comment
of a column, activate the appropriate cell and type the desired
value.
To set or unset flag-type column properties (NOT
NULL, auto incremented, flags), check or uncheck the
corresponding check boxes. Note that the set of column flags
depends on its data type.
To reorder columns, index columns or foreign key columns in the
Column Editor, select the whole column you wish to reorder by
clicking on the selector column on the left of the column grid.
Then move the column by using
Ctrl+Up (to move the column
up) or Ctrl+Down (to move the
column down) keys.
To delete a column, select it by clicking on the selector column
on the left of the column grid, then press the
Delete button on a keyboard.
20.2.3.2.2. Editing Indexes
Indexes management is performed via the
Indexes/Keys dialog.
To add an index, select ,
from the main menu, and click
to add a new index. You can then set the
index name, index kind, index type, and a set of index columns.
To remove an index, select it in the list box on the left, and
click the Delete button.
To change index settings, select the needed index in the list
box on the left. The detailed information about the index is
displayed in the panel on the right hand side. Change the
desired values.
20.2.3.2.3. Editing Foreign Keys
Foreign Keys management is performed via the Foreign
Key Relationships dialog.
To add a foreign key, select ,
from the main menu. This
displays the Foreign Key Relationship
dialog. Click Add. You can then set the
foreign key name, referenced table name, foreign key columns,
and actions upon update and delete.
To remove a foreign key, select it in the list box on the left,
and click the Delete button.
To change foreign key settings, select the required foreign key
in the list box on the left. The detailed information about the
foreign key is displayed in the right hand panel. Change the
desired values.
20.2.3.2.4. Column Properties
The Column Properties tab can be used to
set column options. In addition to the general column properties
presented in the Column Editor, in the Column
Properties tab you can set additional properties such
as Character Set, Collation and Precision.
20.2.3.2.5. Table Properties
To bring up Table Properties select the table and right click to
activate the context menu. Select .
The Table Properties dockable window will
be displayed.
The following table properties can be set:
Auto Increment
Average Row Length
Character Set
Collation
Comment
Data Directory
Index Directory
Maximum Rows
Minimum Rows
Name
Row Format
Schema
Storage Engine
The property Schema is read only.
To create a new view, right click the Views node under the
connection node in Server Explorer. From the node's context menu,
choose the command. This command
opens the SQL Editor.
You can then enter the SQL for your view.
To modify an existing view, double click on a node of the view you
wish to modify, or right click on this node and choose the
command from a context menu. Either
of the commands opens the SQL Editor.
All other view properties can be set in the Properties window.
These properties are:
Catalog
Check Option
Definer
Definition
Definer
Is Updateable
Name
Schema
Security Type
Some of these properties can have arbitrary text values, others
accept values from a predefined set. In the latter case you set
the desired value with an embedded combobox.
The properties Is Updatable and
Schema are readonly.
To save changes you have made, use either
Save or Save All
buttons of the Visual Studio main toolbar, or just press
Ctrl+S.
20.2.3.4. Editing Stored Procedures and Functions
To create a new stored procedure, right-click on the
Stored Procedures node under the connection
node in Server Explorer. From the node's context menu, choose the
Create Routine command. This command opens
the SQL Editor.
To create a new stored function, right-click on the
Functions node under the connection node in
Server Explorer. From the node's context menu, choose the
Create Routine command.
To modify an existing stored routine (procedure or function),
double-click on the node of the routine you wish to modify, or
right-click on this node and choose the Alter
Routine command from the context menu. Either of the
commands opens the SQL Editor.
To create or alter the routine definition using SQL Editor, type
this definition in the SQL Editor using standard SQL. All other
routine properties can be set in the Properties window. These
properties are:
Body
Catalog
Comment
Creation Time
Data Access
Definer
Definition
External Name
External Language
Is Deterministic
Last Modified
Name
Parameter Style
Returns
Schema
Security Type
Specific Name
SQL Mode
SQL Path
Type
Some of these properties can have arbitrary text values, others
accept values from a predefined set. In the latter case set the
desired value using the embedded combo box.
You can also set all the options directly in the SQL Editor, using
the standard CREATE PROCEDURE or
CREATE FUNCTION statement. However, it is
recommended to use the Properties window instead.
To save changes you have made, use either
Save or Save All buttons
of the Visual Studio main toolbar, or just press
Ctrl+S.
20.2.3.5. Editing Triggers
To create a new trigger, right-click on the node of the table, for
which you wish to add a trigger. From the node's context menu,
choose the Create Trigger command. This
command opens the SQL Editor.
To modify an existing trigger, double-click on the node of the
trigger you wish to modify, or right-click on this node and choose
the Alter Trigger command from the context
menu. Either of the commands opens the SQL Editor.
To create or alter the trigger definition using SQL Editor, type
the trigger statement in the SQL Editor using standard SQL.
Note
You should enter only the trigger statement, that is, the part
of the CREATE TRIGGER query that is placed
after the FOR EACH ROW clause.
All other trigger properties are set in the Properties window.
These properties are:
Definer
Event Manipulation
Name
Timing
Some of these properties can have arbitrary text values, others
accept values from a predefined set. In the latter case set the
desired value using the embedded combo box.
The properties Event Table,
Schema, and Server in the
Properties window are read only.
To save changes you have made, use either
Save or Save All
buttons of the Visual Studio main toolbar, or just press
Ctrl+S. Before changes are
saved, you will be asked to confirm the execution of the
corresponding SQL query in a confirmation dialog.
20.2.3.6. Editing User Defined Functions (UDF)
To create a new User Defined Function (UDF), right-click on the
UDFs node under the connection node in Server
Explorer. From the node's context menu, choose the command. This command opens the UDF Editor.
To modify an existing UDF, double-click on the node of the UDF you
wish to modify, or right-click on this node and choose the
command from the context menu. Either
of the commands opens the UDF Editor.
The UDF editor allows you to set the following properties:
Name
So-name (DLL name)
Return type
Is Aggregate
There are text fields for both names, a combo box for the return
type, and a check box to indicate if the UDF is aggregate. All
these options are also accessible via the Properties window.
The property Server in the Properties window is
read only.
To save changes you have made, use either
Save or Save All
buttons of the Visual Studio main toolbar, or just press
Ctrl+S. Before changes are
saved, you will be asked to confirm the execution of the
corresponding SQL query in a confirmation dialog.
20.2.3.7. Cloning Database Objects
Tables, views, stored procedures, and functions can be cloned
using the appropriate Clone command from the context menu:
, ,
. The clone commands open the
corresponding editor for a new object: the Table
Editor for cloning a table, and the SQL
Editor for cloning a view or a routine.
The editor is filled with values of the original object. You can
modify these values in a usual manner.
To save the cloned object, use either Save or Save All buttons of
the Visual Studio main toolbar, or just press
Ctrl+S. Before changes are
saved, you will be asked to confirm the execution of the
corresponding SQL query in a confirmation dialog.
20.2.3.8. Dropping Database Objects
Tables, views, stored routines, triggers, and UDFs can be dropped
with the appropriate Drop command selected from its context menu:
, ,
, ,
.
You will be asked to confirm the execution of the corresponding
drop query in a confirmation dialog.
Dropping of multiple objects is not supported.
20.2.3.9. Using the ADO.NET Entity Framework
Connector/NET 6.0 introduced support for the ADO.NET Entity
Framework. ADO.NET Entity Framework was included with .NET
Framework 3.5 Service Pack 1, and Visual Studio 2008 Service Pack
1. ADO.NET Entity Framework was released on 11th August 2008.
ADO.NET Entity Framework provides an Object Relational Mapping
(ORM) service, mapping the relational database schema to objects.
The ADO.NET Entity Framework defines several layers, these can be
summarized as:
Logical - this layer defines
the relational data and is defined by the Store Schema
Definition Language (SSDL).
Conceptual - this layer
defines the .NET classes and is defined by the Conceptual
Schema Definition Language (CSDL)
Mapping - this layer defines
the mapping from .NET classes to relational tables and
associations, and is defined by Mapping Specification Language
(MSL).
Connector/NET integrates with Visual Studio 2008 to provide a
range of helpful tools to assist the developer.
A full treatment of ADO.NET Entity Framework is beyond the scope
of this manual. You are encouraged to review the
Microsoft
ADO.NET Entity Framework documentation.
20.2.3.9.1. Tutorial: Using an Entity Framework Entity as a Windows Forms Data
Source
In this tutorial you will learn how to create a Windows Forms
Data Source from an Entity in an Entity Data Model. This
tutorial assumes that you have installed the World example
database, which can be downloaded from the
MySQL Documentation
page. You can also find details on how to install the
database on the same page. It will also be convenient for you to
create a connection to the World database after it is installed.
For instructions on how to do this see
Section 20.2.3.1, “Making a connection”.
Creating a new Windows Forms
application
The first step is to create a new Windows Forms application.
In Visual Studio, select ,
, from the
main menu.
Choose the Windows Forms Application
installed template. Click OK. The
solution is created.
Adding an Entity Data Model
You will now add an Entity Data Model to your solution.
In the Solution Explorer, right click on your application
and select , . From Visual Studio installed
templates select ADO.NET Entity Data
Model. Click Add.
You will now see the Entity Data Model Wizard. You will use
the wizard to generate the Entity Data Model from the world
example database. Select the icon Generate from
database. Click Next.
You can now select the connection you made earlier to the
World database. If you have not already done so, you can
create the new connection at this time by clicking on
New Connection.... For further
instructions on creating a connection to a database see
Section 20.2.3.1, “Making a connection”.
Make a note of the entity connection settings to be used in
App.Config, as these will be used later to write the
necessary control code.
Click Next.
The Entity Data Model Wizard connects to the database. You
are then presented with a tree structure of the database.
From this you can select the object you would like to
include in your model. If you had created Views and Stored
Routines these will be displayed along with any tables. In
this example you just need to select the tables. Click
Finish to create the model and exit
the wizard.
Visual Studio will generate the model and then display it.
From the Visual Studio main menu select
, ,
to ensure that everything compiles correctly so far.
Adding a new Data Source
You will now add a new Data Source to your project and see how
it can be used to read and write to the database.
From the Visual Studio main menu select
, . You will be presented with the Data
Source Configuration Wizard.
Select the Object icon. Click
Next.
You will now select the Object you wish to bind to. Expand
the tree. In this tutorial you will select the city table.
Once the city table has been selected click
Next.
The wizard will confirm that the city object is to be added.
Click Finish.
The city object will be display in the Data Sources panel.
If the Data Sources panel is not displayed, select
, from the Visual Studio main menu. The
docked panel will then be displayed.
Using the Data Source in a Windows
Form
You will now learn how to use the Data Source in a Windows Form.
In the Data Sources panel select the Data Source you just
created and drag and drop it onto the Form Designer. By
default the Data Source object will be added as a Data Grid
View control. Note that the Data Grid View control is bound
to the cityBindingSource and the
Navigator control is bound to
cityBindingNavigator.
Save and rebuild the solution before continuing.
Adding Code to Populate the Data Grid
View
You are now ready to add code to ensure that the Data Grid View
control will be populated with data from the City database
table.
Double click the form to access its code.
Add code to instatiate the Entity Data Model's
EntityContainer object and retrieve data from the database
to populate the control.
Save and rebuild the solution.
Run the solution. Ensure the grid is populated and you can
navigate the database.
Adding Code to Save Changes to the
Database
You will now add code to enable you to save changes to the
database.
The Binding source component ensures that changes made in the
Data Grid View control are also made to the Entity classes bound
to it. However, that data needs to be saved back from the
entities to the database itself. This can be achieved by the
enabling of the Save button in the Navigator control, and the
addition of some code.
In the Form Designer click on the Save icon in the Form
toolbar and ensure that its Enabled property is set to True.
Double click the Save icon in the Form toolbar to display
its code.
You now need to add code to ensure that data is saved to the
database when the save button is click in the application.
Once the code has been added, save the solution and rebuild
it. Run the application and verify that changes made in the
grid are saved.
20.2.3.9.2. Tutorial: Databinding in ASP.NET using LINQ on Entities
In this tutorial you create an ASP.NET web page that binds LINQ
queries to entities using the Entity Framework mapping.
If you have not already done so, you should install the World
example database prior to attempting this tutorial. Instructions
on where to obtain the database and instructions on how to
install it where given in the tutorial
Section 20.2.3.9.1, “Tutorial: Using an Entity Framework Entity as a Windows Forms Data
Source”.
Creating an ASP.NET web site
In this part of the tutorial you will create an ASP.NET web
site. The web site will use the World database. The main web
page will feature a drop down list from which you can select a
country, data about that country's cities will then be displayed
in a grid view control.
From the Visual Studio main menu select
, ,
.
From the Visual Studio installed templates select
ASP.NET Web Site. Click
OK. You will be presented with the
Source view of your web page by default.
Click the Design view tab situated underneath the Source
view panel.
In the Design view panel, enter some text to decorate the
blank web page.
Click on Toolbox. From the list of controls select
DropDownList. Drag and drop the control
to a location beneath the text on your web page.
From the DropDownList control's context
menu, ensure that the Enable
AutoPostBack check box is enabled. This will
ensure the control's event handler is called when an item is
selected. The user's choice will in turn be used to populate
the GridView control.
From the Toolbox select the GridView
control.
Drag and drop the Grid Vew control to a location just below
the Drop Down List you already placed.
At this point it is recommended that you save your solution,
and build the solution to ensure that there are no errors.
If you run the solution you will see that the text and drop
down list are displayed, but the list is empty. Also, the
grid view does not appear at all. Adding this functionality
is described in the following sections.
At this stage you have a web site that will build, but further
functionality is required. The next step will be to use the
Entity Framework to create a mapping from the World database
into entities that you can control programmatically.
Creating an ADO.NET Entity Data
Model
In this stage of the tutorial you will add an ADO.NET Entity
Data Model to your project, using the World database at the
storage level. The procedure for doing this is described in the
tutorial
Section 20.2.3.9.1, “Tutorial: Using an Entity Framework Entity as a Windows Forms Data
Source”,
and so will not be repeated here.
Populating a Drop Data List Box with using
the results of a entity LINQ query
In this part of the tutorial you will write code to populate the
DropDownList control. When the web page loads the data to
populate the list will be achieved by using the results of a
LINQ query on the model created previously.
In the Design view panel, double click on any blank area.
This brings up the Page_Load
method.
Modify the relevant section of code according to the
following listing:
...
public partial class _Default : System.Web.UI.Page
{
worldModel.worldEntities we;
protected void Page_Load(object sender, EventArgs e)
{
we = new worldModel.worldEntities();
if (!IsPostBack)
{
var countryQuery = from c in we.country
orderby c.Name
select new { c.Code, c.Name };
DropDownList1.DataValueField = "Code";
DropDownList1.DataTextField = "Name";
DropDownList1.DataSource = countryQuery;
DataBind();
}
}
...
Note that the list control only needs to be populated when
the page first loads. The conditional code ensures that if
the page is subsequently reloaded, the list control is not
repopulated, which would cause the user selection to be
lost.
Save the solution, build it and run it. You should see the
list control has been populated. You can select an item, but
as yet the grid view control does not apear.
At this point you have a working Drop Down List control,
populated by a LINQ query on your entity data model.
Populating a Grid View control using an
entity LINQ query
In the last part of this tutorial you will populate the Grid
View Control using a LINQ query on your entity data model.
In the Design view double click on the
DropDownList control. This causes its
SelectedIndexChanged code to be
displayed. This method is called when a user selects an item
in the list control and thus fires an AutoPostBack event.
Modify the relevant section of code accordingly to the
following listing:
...
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
var cityQuery = from c in we.city
where c.CountryCode == DropDownList1.SelectedValue
orderby c.Name
select new { c.Name, c.Population, c.CountryCode };
GridView1.DataSource = cityQuery;
DataBind();
}
...
The grid view control is populated from the result of the
LINQ query on the entity data model.
As a check compare your code to that shown in the following
screenshot:
Save, build and run the solution. As you select a country
you will see its cities are displayed in the grid view
control.
In this tutorial you have seen how to create an ASP.NET web
site, you have also seen how you can access a MySQL database via
LINQ queries on an entity data model.
20.2.4. Connector/NET Programming
Connector/NET comprises several classes that are used to connect to
the database, execute queries and statements, and manage query
results.
The following are the major classes of Connector/NET:
MySqlCommand: Represents an SQL statement to
execute against a MySQL database.
MySqlCommandBuilder: Automatically generates
single-table commands used to reconcile changes made to a
DataSet with the associated MySQL database.
MySqlConnection: Represents an open
connection to a MySQL Server database.
MySqlDataAdapter: Represents a set of data
commands and a database connection that are used to fill a data
set and update a MySQL database.
MySqlDataReader: Provides a means of reading
a forward-only stream of rows from a MySQL database.
MySqlException: The exception that is thrown
when MySQL returns an error.
MySqlHelper: Helper class that makes it
easier to work with the provider.
MySqlTransaction: Represents an SQL
transaction to be made in a MySQL database.
In the following sections you will learn about some common use cases
for Connector/NET, including BLOB handling, date handling, and using
Connector/NET with common tools such as Crystal Reports.
20.2.4.1. Tutorial: An Introduction to Connector/NET Programming
This section provides a gentle introduction to programming with
Connector/NET. The example code is written in C#, and is designed to
work on both Microsoft .NET Framework and Mono.
This tutorial is designed to get you up and running with
Connector/NET as quickly as possible, it does not go into detail on
any particular topic. However, the following sections of this manual
describe each of the topics introduced in this tutorial in more
detail. In this tutorial you are encouraged to type in and run the
code, modifying it as required for your setup.
This tutorial assumes you have MySQL and Connector/NET already
installed. It also assumes that you have installed the World example
database, which can be downloaded from the
MySQL Documentation
page. You can also find details on how to install the
database on the same page.
Note
Before compiling the example code make sure that you have added
References to your project as required. The References required
are System, System.Data and
MySql.Data.
20.2.4.1.1. The MySqlConnection Object
For your Connector/NET application to connect to a MySQL database
it needs to establish a connection. This is achieved through the
use of a MySqlConnection object.
The MySqlConnection constructor takes a connection string as one
of its parameters. The connection string provides necessary
information to make the connection to the MySQL database. The
connection string is discussed more fully in
Section 20.2.4.2, “Connecting to MySQL Using Connector/NET”. A
reference containing a list of supported connection string options
can also be found in
Section 20.2.4.5, “Connector/NET Connection String Options Reference”.
The following code shows how to create a connection object.
using System;
using System.Data;
using MySql.Data;
using MySql.Data.MySqlClient;
public class Tutorial1
{
public static void Main()
{
string connStr = "server=localhost;user=root;database=world;port=3306;password=******;";
MySqlConnection conn = new MySqlConnection(connStr);
try
{
Console.WriteLine("Connecting to MySQL...");
conn.Open();
// Perform databse operations
conn.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
Console.WriteLine("Done.");
}
}
When the MySqlConnection constructor is invoked
it returns a connection object, which is used for subsequent
database operations. The first operation in this example is to
open the connection. This needs to be done before further
operations take place. Before the application exits the connection
to the database needs to be closed by calling
Close on the connection object.
Sometimes an attempt to perform an Open on a
connection object can fail, this will generate an exception that
can be handled via standard exception handling code.
In this section you have learned how to create a connection to a
MySQL database, and open and close the corresponding connection
object.
20.2.4.1.2. The MySqlCommand Object
Once a connection has been established with the MySQL database,
the next step is do carry out the desired database operations.
This can be achieved through the use of the
MySqlCommand object.
You will see how to create a MySqlCommand
object. Once it has been created there are three main methods of
interest that you can call:
ExecuteReader - used to query
the database. Results are usually returned in a
MySqlDataReader object, created by
ExecuteReader.
ExecuteNonQuery - used to
insert and delete data.
ExecuteScalar - used to
return a single value.
Once a MySqlCommand object has been created,
you will call one of the above methods on it to carry out a
database operation, such as perform a query. The results are
usually returned into a MySqlDataReader object,
and then processed, for example the results might be displayed.
The following code demonstrates how this could be done.
using System;
using System.Data;
using MySql.Data;
using MySql.Data.MySqlClient;
public class Tutorial2
{
public static void Main()
{
string connStr = "server=localhost;user=root;database=world;port=3306;password=******;";
MySqlConnection conn = new MySqlConnection(connStr);
try
{
Console.WriteLine("Connecting to MySQL...");
conn.Open();
string sql = "SELECT Name, HeadOfState FROM Country WHERE Continent='Oceania'";
MySqlCommand cmd = new MySqlCommand(sql, conn);
MySqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
Console.WriteLine(rdr[0]+" -- "+rdr[1]);
}
rdr.Close();
conn.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
Console.WriteLine("Done.");
}
}
When a connection has been created and opened, the code then
creates a MySqlCommand object. Note that the
SQL query to be executed is passed to the
MySqlCommand constructor. The
ExecuteReader method is then used to generate a
MySqlReader object. The
MySqlReader object contains the results
generated by the SQL executed on the command object. Once the
results have been obtained in a MySqlReader
object, the results can be processed. In this case the information
is simply printed out as part of a while loop.
Finally, the MySqlReader object is displosed of
by running its Close method on it.
In the next example you will see how to use the
ExecuteNonQuery method.
The procedure for performing an ExecuteNonQuery
method call is simpler, as there is no need to create an object to
store results. This is because ExecuteNonQuery
is only used for inserting, updating and deleting data. The
following example illustrates a simple update to the Country
table:
using System;
using System.Data;
using MySql.Data;
using MySql.Data.MySqlClient;
public class Tutorial3
{
public static void Main()
{
string connStr = "server=localhost;user=root;database=world;port=3306;password=******;";
MySqlConnection conn = new MySqlConnection(connStr);
try
{
Console.WriteLine("Connecting to MySQL...");
conn.Open();
string sql = "INSERT INTO Country (Name, HeadOfState, Continent) VALUES ('Disneyland','Mickey Mouse', 'North America')";
MySqlCommand cmd = new MySqlCommand(sql, conn);
cmd.ExecuteNonQuery();
conn.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
Console.WriteLine("Done.");
}
}
The query is constructed, the command object created and the
ExecuteNonQuery method called on the command
object. You can access your MySQL database with the MySQL Client
program and verify that the update was carried out correctly.
Finally, you will see how the ExecuteScalar
method can be used to return a single value. Again, this is
straightforward, as a MySqlDataReader object is
not required to store results, a simple variable will do. The
following code illustrates how to use
ExecuteScalar:
using System;
using System.Data;
using MySql.Data;
using MySql.Data.MySqlClient;
public class Tutorial4
{
public static void Main()
{
string connStr = "server=localhost;user=root;database=world;port=3306;password=******;";
MySqlConnection conn = new MySqlConnection(connStr);
try
{
Console.WriteLine("Connecting to MySQL...");
conn.Open();
string sql = "SELECT COUNT(*) FROM Country";
MySqlCommand cmd = new MySqlCommand(sql, conn);
object result = cmd.ExecuteScalar();
if (result != null)
{
int r = Convert.ToInt32(result);
Console.WriteLine("Number of countries in the World database is: " + r);
}
conn.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
Console.WriteLine("Done.");
}
}
This example uses a simple query to count the rows in the Country
table. The result is obtained by calling
ExecuteScaler on the command object.
20.2.4.1.3. Working with Decoupled Data
Previously, when using MySqlDataReader, the connection to the
database was continually maintained, unless explicitly closed. It
is also possible to work in a manner where a connection is only
established when needed. For example, in this mode, a connection
could be established in order to read a chunk of data, the data
could then be modified by the application as required. A
connection could then be reestablished only if and when the
application needs to write data back to the database. This
decouples the working data set from the database.
This decouple mode of working with data is supported by
Connector/NET. There are several parts involved in allowing this
method to work:
Data Set - The Data Set is
the area in which data is loaded in order to read or modify
it. A DataSet object is instantiated, which
can store multiple tables of data.
Data Adapter - The Data
Adapter is the interface between the Data Set and the database
itself. The Data Adapter is responsible for efficiently
managing connections to the database, opening and closing them
as required. The Data Adapter is created by instantiating an
object of the MySqlDataAdapter class. The
MySqlDataAdapter object has two main
methods: Fill which reads data into the
Data Set, and Update, which writes data
from the Data Set to the database.
Command Builder - The Command
Builder is a support object. The Command Builder works in
conjunction with the Data Adapter. When a
MySqlDataAdapter object is created it is
typically given an initial SELECT statement. From this SELECT
statement the Command Builder can work out the corresponding
INSERT, UPDATE and DELETE statements that would be required
should the database need to be updated. To create the Command
Builder an object of the class
MySqlCommandBuilder is created.
Each of these classes will now be discussed in more detail.
Instantiating a DataSet object
A DataSet object can be created simply, as
shown in the following example code snippet:
DataSet dsCountry;
...
dsCountry = new DataSet();
Although this creates the DataSet object it has
not yet filled it with data. For that a Data Adapter is required.
Instantiating a MySqlDataAdapter
object
The MySqlDataAdapter can be created as
illustrated by the following example:
MySqlDataAdapter daCountry;
...
string sql = "SELECT Code, Name, HeadOfState FROM Country WHERE Continent='North America'";
daCountry = new MySqlDataAdapter (sql, conn);
Note, the MySqlDataAdapter is given the SQL
specifying the data you wish to work with.
Instantiating a MySqlCommandBuilder
object
Once the MySqlDataAdapter has been created, it
is necessary to generate the additional statements required for
inserting, updating and deleting data. There are several ways to
do this, but in this tutorial you will see how this can most
easily be done with MySqlCommandBuilder. The
following code snippet ilustrates how this is done:
MySqlCommandBuilder cb = new MySqlCommandBuilder(daCountry);
Note that the MySqlDataAdapter object is passed
as a parameter to the command builder.
Filling the Data Set
In order to do anything useful with the data from your datbase,
you need to load it into a Data Set. This is one of the jobs of
the MySqlDataAdapter object, and is carried out
with its Fill method. The following example
code illustrates this:
DataSet dsCountry;
...
dsCountry = new DataSet();
...
daCountry.Fill(dsCountry, "Country");
Note the Fill method is a
MySqlDataAdapter method, the Data Adapter knows
how to establish a connec tion with the database and retrieve the
required data, and then populates the Data Set when the
Fill method is called. The second parameter
“Country” is the table in the Data Set to update.
Updating the Data Set
The data in the Data Set can now be manipulated by the application
as required. At some point, changes to data will need to be
written back to the database. This is achieved through a
MySqlDataAdapter method, the
Update method.
daCountry.Update(dsCountry, "Country");
Again, the Data Set and the table within the Data Set to update
are specified.
Working Example
The interactions between the DataSet,
MySqlDataAdapter and
MySqlCommandBuilder classes can be a little
confusing, so their operation can perhaps be best illustrated by
working code.
In this example, data from the World database is read into a Data
Grid View control. Here, the data can be viewed and changed before
clicking an update button. The update button then activates code
to write changes back to the database. The code uses the
principles explained above. The application was built using the
Microsoft Visual Studio in order to place and create the user
interface controls, but the main code that uses the key classes
descibed above is shown below, and is portable.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data;
using MySql.Data.MySqlClient;
namespace WindowsFormsApplication5
{
public partial class Form1 : Form
{
MySqlDataAdapter daCountry;
DataSet dsCountry;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
string connStr = "server=localhost;user=root;database=world;port=3306;password=******;";
MySqlConnection conn = new MySqlConnection(connStr);
try
{
label2.Text = "Connecting to MySQL...";
string sql = "SELECT Code, Name, HeadOfState FROM Country WHERE Continent='North America'";
daCountry = new MySqlDataAdapter (sql, conn);
MySqlCommandBuilder cb = new MySqlCommandBuilder(daCountry);
dsCountry = new DataSet();
daCountry.Fill(dsCountry, "Country");
dataGridView1.DataSource = dsCountry;
dataGridView1.DataMember = "Country";
}
catch (Exception ex)
{
label2.Text = ex.ToString();
}
}
private void button1_Click(object sender, EventArgs e)
{
daCountry.Update(dsCountry, "Country");
label2.Text = "MySQL Database Updated!";
}
}
}
The application running is shown below:
20.2.4.1.4. Working with Parameters
This part of the tutorial shows you how to use parameters in your
Connector/NET application.
Although it is possible to build SQL query strings directly from
user input, this is not advisable as it does not prevent from
erroneous or malicious information being entered. It is safer to
use parameters as they will be processed as field data only. For
example, imagine the following query was contructed from user
input:
string sql = "SELECT Name, HeadOfState FROM Country WHERE Continent = "+user_continent;
If the string user_continent came from a Text
Box control, there would potentially be no control over the string
enetred by the user. The user could enter a string that generates
a run time error, or in the worst case actually harms the system.
When using parameters it is not possible to do this because a
parameter is only ever treated as a field parameter, rather than
an arbitrary piece of SQL code.
The same query written user a parameter for user input would be:
string sql = "SELECT Name, HeadOfState FROM Country WHERE Continent = @Continent";
Note that the parameter is preceded by an '@' symbol to indicate
it is to be treated as a parameter.
As well as marking the position of the parameter in the query
string, it is necessary to create a parameter object that can be
passed to the Command object. In Connector/NET the class
MySqlParameter is used for this purpose. The
use of MySqlParameter is best illustrated by a
small code snippet:
MySqlParameter param = new MySqlParameter();
param.ParameterName = "@Continent";
param.Value = "North America";
cmd.Parameters.Add(param);
In this example the string "North America" is supplied as the
parameter value statically, but in a more practical example it
would come from a user input control. Once the parameter has its
name and value set it needs to be added to the Command object
using the Add method.
A further example illustrates this:
using System;
using System.Data;
using MySql.Data;
using MySql.Data.MySqlClient;
public class Tutorial5
{
public static void Main()
{
string connStr = "server=localhost;user=root;database=world;port=3306;password=******;";
MySqlConnection conn = new MySqlConnection(connStr);
try
{
Console.WriteLine("Connecting to MySQL...");
conn.Open();
string sql = "SELECT Name, HeadOfState FROM Country WHERE Continent=@Continent";
MySqlCommand cmd = new MySqlCommand(sql, conn);
Console.WriteLine("Enter a continent e.g. 'North America', 'Europe': ");
string user_input = Console.ReadLine();
MySqlParameter param = new MySqlParameter();
param.ParameterName = "@Continent";
param.Value = user_input;
cmd.Parameters.Add(param);
MySqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
Console.WriteLine(rdr["Name"]+" --- "+rdr["HeadOfState"]);
}
conn.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
Console.WriteLine("Done.");
}
}
In this part of the tutorial you have see how to use parameters to
make your code more secure.
20.2.4.1.5. Working with Stored Procedures
In this section you will see how to work with Stored Procedures.
This section assumes you have a basic understanding of what a
Stored Procedure is, and how to create one.
For the purposes of this tutorial, you will create a simple Stored
Procedure to see how it can be called from Connector/NET. In the
MySQL Client program, connect to the World database and enter the
following Stored Procedure:
DELIMITER //
CREATE PROCEDURE country_hos
(IN con CHAR(20))
BEGIN
SELECT Name, HeadOfState FROM Country
WHERE Continent = con;
END //
DELIMITER ;
Test the Stored Procedure wors as expec ted by typing the
following into the MySQL Client program:
CALL country_hos('Europe');
Note that The Stored Routine takes a single parameter, which is
the continent you wish to restrict your search to.
Having confirmed that the Stored Procedure is present and correct
you can now move on to seeing how it can be accessed from
Connector/NET.
Calling a Stored Procedure from your Connector/NET application is
similar to techniques you have seen earlier in this tutorial. A
MySqlCommand object is created, but rather than
taking a SQL query as a parameter it takes the name of the Stored
Procedure to call. The MySqlCommand object also
needs to be set to the type of Stored Procedure. This is
illustrated by the following code snippet:
string rtn = "country_hos";
MySqlCommand cmd = new MySqlCommand(rtn, conn);
cmd.CommandType = CommandType.StoredProcedure;
In this case you also need to pass a parameter to the Stored
Procedure. This can be achieved using the techniques seen in the
previous section on parameters,
Section 20.2.4.1.4, “Working with Parameters”.
This is shown in the following code snippet:
MySqlParameter param = new MySqlParameter();
param.ParameterName = "@con";
param.Value = "Europe";
cmd.Parameters.Add(param);
The value of the parameter @con could more
realistically have come from a user input control, but for
simplicity it is set as a static string in this example.
At this point everything is set up and all that now needs to be
done is to call the routine. This can be achieved using techniques
also learned in earlier sections, but in this case the
ExecuteReader method of the
MySqlCommand object is used.
Complete working code for the Stored Procedure example is shown
below:
using System;
using System.Data;
using MySql.Data;
using MySql.Data.MySqlClient;
public class Tutorial6
{
public static void Main()
{
string connStr = "server=localhost;user=root;database=world;port=3306;password=******;";
MySqlConnection conn = new MySqlConnection(connStr);
try
{
Console.WriteLine("Connecting to MySQL...");
conn.Open();
string rtn = "country_hos";
MySqlCommand cmd = new MySqlCommand(rtn, conn);
cmd.CommandType = CommandType.StoredProcedure;
MySqlParameter param = new MySqlParameter();
param.ParameterName = "@con";
param.Value = "Europe";
cmd.Parameters.Add(param);
MySqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
Console.WriteLine(rdr[0] + " --- " + rdr[1]);
}
conn.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
Console.WriteLine("Done.");
}
}
In this section you have seen how to call a Stored Procedure from
Connector/NET. For the moment, this concludes our introductory
tutorial on programming with Connector/NET.
20.2.4.2. Connecting to MySQL Using Connector/NET
Introduction
All interaction between a .NET application and the MySQL server is
routed through a MySqlConnection object. Before
your application can interact with the server, a
MySqlConnection object must be instanced,
configured, and opened.
Even when using the MySqlHelper class, a
MySqlConnection object is created by the helper
class.
In this section, we will describe how to connect to MySQL using
the MySqlConnection object.
20.2.4.3. Creating a Connection String
The MySqlConnection object is configured using
a connection string. A connection string contains sever key/value
pairs, separated by semicolons. Each key/value pair is joined with
an equals sign.
The following is a sample connection string:
Server=127.0.0.1;Uid=root;Pwd=12345;Database=test;
In this example, the MySqlConnection object is
configured to connect to a MySQL server at
127.0.0.1, with a user name of
root and a password of
12345. The default database for all statements
will be the test database.
The following options are available:
Note
Using the '@' symbol for parameters is now the preferred
approach although the old pattern of using '?' is still
supported.
Please be aware however that using '@' can cause conflicts when
user variables are also used. To help with this situation please
see the documentation on the Allow User
Variables connection string option, which can be found
here:
Section 20.2.4.3, “Creating a Connection String”.
The Old Syntax connection string option has
now been deprecated.
20.2.4.3.1. Opening a Connection
Once you have created a connection string it can be used to open
a connection to the MySQL server.
The following code is used to create a
MySqlConnection object, assign the connection
string, and open the connection.
Visual Basic Example
Dim conn As New MySql.Data.MySqlClient.MySqlConnection
Dim myConnectionString as String
myConnectionString = "server=127.0.0.1;" _
& "uid=root;" _
& "pwd=12345;" _
& "database=test;"
Try
conn.ConnectionString = myConnectionString
conn.Open()
Catch ex As MySql.Data.MySqlClient.MySqlException
MessageBox.Show(ex.Message)
End Try
C# Example
MySql.Data.MySqlClient.MySqlConnection conn;
string myConnectionString;
myConnectionString = "server=127.0.0.1;uid=root;" +
"pwd=12345;database=test;";
try
{
conn = new MySql.Data.MySqlClient.MySqlConnection();
conn.ConnectionString = myConnectionString;
conn.Open();
}
catch (MySql.Data.MySqlClient.MySqlException ex)
{
MessageBox.Show(ex.Message);
}
You can also pass the connection string to the constructor of
the MySqlConnection class:
Visual Basic Example
Dim myConnectionString as String
myConnectionString = "server=127.0.0.1;" _
& "uid=root;" _
& "pwd=12345;" _
& "database=test;"
Try
Dim conn As New MySql.Data.MySqlClient.MySqlConnection(myConnectionString)
conn.Open()
Catch ex As MySql.Data.MySqlClient.MySqlException
MessageBox.Show(ex.Message)
End Try
C# Example
MySql.Data.MySqlClient.MySqlConnection conn;
string myConnectionString;
myConnectionString = "server=127.0.0.1;uid=root;" +
"pwd=12345;database=test;";
try
{
conn = new MySql.Data.MySqlClient.MySqlConnection(myConnectionString);
conn.Open();
}
catch (MySql.Data.MySqlClient.MySqlException ex)
{
MessageBox.Show(ex.Message);
}
Once the connection is open it can be used by the other
Connector/NET classes to communicate with the MySQL server.
20.2.4.3.2. Handling Connection Errors
Because connecting to an external server is unpredictable, it is
important to add error handling to your .NET application. When
there is an error connecting, the
MySqlConnection class will return a
MySqlException object. This object has two
properties that are of interest when handling errors:
When handling errors, you can your application's response based
on the error number. The two most common error numbers when
connecting are as follows:
The following code shows how to adapt the application's response
based on the actual error:
Visual Basic Example
Dim myConnectionString as String
myConnectionString = "server=127.0.0.1;" _
& "uid=root;" _
& "pwd=12345;" _
& "database=test;"
Try
Dim conn As New MySql.Data.MySqlClient.MySqlConnection(myConnectionString)
conn.Open()
Catch ex As MySql.Data.MySqlClient.MySqlException
Select Case ex.Number
Case 0
MessageBox.Show("Cannot connect to server. Contact administrator")
Case 1045
MessageBox.Show("Invalid username/password, please try again")
End Select
End Try
C# Example
MySql.Data.MySqlClient.MySqlConnection conn;
string myConnectionString;
myConnectionString = "server=127.0.0.1;uid=root;" +
"pwd=12345;database=test;";
try
{
conn = new MySql.Data.MySqlClient.MySqlConnection(myConnectionString);
conn.Open();
}
catch (MySql.Data.MySqlClient.MySqlException ex)
{
switch (ex.Number)
{
case 0:
MessageBox.Show("Cannot connect to server. Contact administrator");
case 1045:
MessageBox.Show("Invalid username/password, please try again");
}
}
Important
Note that if you are using multilanguage databases you must
specify the character set in the connection string. If you do
not specify the character set, the connection defaults to the
latin1 charset. You can specify the
character set as part of the connection string, for example:
MySqlConnection myConnection = new MySqlConnection("server=127.0.0.1;uid=root;" +
"pwd=12345;database=test;Charset=latin1;");
20.2.4.4. Using Connector/NET with Connection Pooling
The Connector/NET supports connection pooling. This is enabled by
default, but can be turned off via connection string options. See
Section 20.2.4.3, “Creating a Connection String”
for further information.
Connection pooling works by keeping the native connection to the
server live when the client disposes of a
MySqlConnection. Subsequently, if a new
MySqlConnection object is opened, it will be
created from the connection pool, rather than creating a new
native connection. This improves performance.
To work as designed, it is best to let the connection pooling
system manage all connections. You should not create a globally
accessible instance of MySqlConnection and then
manually open and close it. This interferes with the way the
pooling works and can lead to unpredictable results or even
exceptions.
One approach that simplifies things is to avoid manually creating
a MySqlConnection object. Instead use the
overloaded methods that take a connection string as an argument.
Using this approach, Connector/NET will automatically create,
open, close and destroy connections, using the connection pooling
system for best performance.
Typed Datasets and the MembershipProvider and
RoleProvider classes use this approach. Most
classes that have methods that take a
MySqlConnection as an argument, also have
methods that take a connection string as an argument. This
includes MySqlDataAdapter.
Instead of manually creating MySqlCommand
objects, you can use the static methods of the
MySqlHelper class. These take a connection
string as an argument, and they fully support connection pooling.
20.2.4.5. Connector/NET Connection String Options Reference
The following table lists the valid names for connection pooling
values within the ConnectionString. For more
information about connection pooling, see Connection Pooling for the
MySQL Data Provider.
20.2.4.6. Using the Connector/NET with Prepared Statements
Introduction
As of MySQL 4.1, it is possible to use prepared statements with
Connector/NET. Use of prepared statements can provide significant
performance improvements on queries that are executed more than
once.
Prepared execution is faster than direct execution for statements
executed more than once, primarily because the query is parsed
only once. In the case of direct execution, the query is parsed
every time it is executed. Prepared execution also can provide a
reduction of network traffic because for each execution of the
prepared statement, it is necessary only to send the data for the
parameters.
Another advantage of prepared statements is that it uses a binary
protocol that makes data transfer between client and server more
efficient.
20.2.4.6.1. Preparing Statements in Connector/NET
To prepare a statement, create a command object and set the
.CommandText property to your query.
After entering your statement, call the
.Prepare method of the
MySqlCommand object. After the statement is
prepared, add parameters for each of the dynamic elements in the
query.
After you enter your query and enter parameters, execute the
statement using the .ExecuteNonQuery(),
.ExecuteScalar(), or
.ExecuteReader methods.
For subsequent executions, you need only modify the values of
the parameters and call the execute method again, there is no
need to set the .CommandText property or
redefine the parameters.
Visual Basic Example
Dim conn As New MySqlConnection
Dim cmd As New MySqlCommand
conn.ConnectionString = strConnection
Try
conn.Open()
cmd.Connection = conn
cmd.CommandText = "INSERT INTO myTable VALUES(NULL, @number, @text)"
cmd.Prepare()
cmd.Parameters.Add("@number", 1)
cmd.Parameters.Add("@text", "One")
For i = 1 To 1000
cmd.Parameters["@number"].Value = i
cmd.Parameters["@text"].Value = "A string value"
cmd.ExecuteNonQuery()
Next
Catch ex As MySqlException
MessageBox.Show("Error " & ex.Number & " has occurred: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
C# Example
MySql.Data.MySqlClient.MySqlConnection conn;
MySql.Data.MySqlClient.MySqlCommand cmd;
conn = new MySql.Data.MySqlClient.MySqlConnection();
cmd = new MySql.Data.MySqlClient.MySqlCommand();
conn.ConnectionString = strConnection;
try
{
conn.Open();
cmd.Connection = conn;
cmd.CommandText = "INSERT INTO myTable VALUES(NULL, @number, @text)";
cmd.Prepare();
cmd.Parameters.Add("@number", 1);
cmd.Parameters.Add("@text", "One");
for (int i=1; i <= 1000; i++)
{
cmd.Parameters["@number"].Value = i;
cmd.Parameters["@text"].Value = "A string value";
cmd.ExecuteNonQuery();
}
}
catch (MySql.Data.MySqlClient.MySqlException ex)
{
MessageBox.Show("Error " + ex.Number + " has occurred: " + ex.Message,
"Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
20.2.4.7. Accessing Stored Procedures with Connector/NET
Introduction
With the release of MySQL version 5 the MySQL server now supports
stored procedures with the SQL 2003 stored procedure syntax.
A stored procedure is a set of SQL statements that can be stored
in the server. Once this has been done, clients do not need to
keep reissuing the individual statements but can refer to the
stored procedure instead.
Stored procedures can be particularly useful in situations such as
the following:
When multiple client applications are written in different
languages or work on different platforms, but need to perform
the same database operations.
When security is paramount. Banks, for example, use stored
procedures for all common operations. This provides a
consistent and secure environment, and procedures can ensure
that each operation is properly logged. In such a setup,
applications and users would not get any access to the
database tables directly, but can only execute specific stored
procedures.
Connector/NET supports the calling of stored procedures through
the MySqlCommand object. Data can be passed in
and our of a MySQL stored procedure through use of the
MySqlCommand.Parameters collection.
Note
When you call a stored procedure, the command object makes an
additional SELECT call to
determine the parameters of the stored procedure. You must
ensure that the user calling the procedure has the
SELECT privilege on the
mysql.proc table to enable them to verify the
parameters. Failure to do this will result in an error when
calling the procedure.
This section will not provide in-depth information on creating
Stored Procedures. For such information, please refer to
http://dev.mysql.com/doc/mysql/en/stored-routines.html.
A sample application demonstrating how to use stored procedures
with Connector/NET can be found in the Samples
directory of your Connector/NET installation.
20.2.4.7.1. Creating Stored Procedures from Connector/NET
Stored procedures in MySQL can be created using a variety of
tools. First, stored procedures can be created using the
mysql command-line client. Second, stored
procedures can be created using the MySQL Query
Browser GUI client. Finally, stored procedures can be
created using the .ExecuteNonQuery method of
the MySqlCommand object:
Visual Basic Example
Dim conn As New MySqlConnection
Dim cmd As New MySqlCommand
conn.ConnectionString = "server=127.0.0.1;" _
& "uid=root;" _
& "pwd=12345;" _
& "database=test"
Try
conn.Open()
cmd.Connection = conn
cmd.CommandText = "CREATE PROCEDURE add_emp(" _
& "IN fname VARCHAR(20), IN lname VARCHAR(20), IN bday DATETIME, OUT empno INT) " _
& "BEGIN INSERT INTO emp(first_name, last_name, birthdate) " _
& "VALUES(fname, lname, DATE(bday)); SET empno = LAST_INSERT_ID(); END"
cmd.ExecuteNonQuery()
Catch ex As MySqlException
MessageBox.Show("Error " & ex.Number & " has occurred: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
C# Example
MySql.Data.MySqlClient.MySqlConnection conn;
MySql.Data.MySqlClient.MySqlCommand cmd;
conn = new MySql.Data.MySqlClient.MySqlConnection();
cmd = new MySql.Data.MySqlClient.MySqlCommand();
conn.ConnectionString = "server=127.0.0.1;uid=root;" +
"pwd=12345;database=test;";
try
{
conn.Open();
cmd.Connection = conn;
cmd.CommandText = "CREATE PROCEDURE add_emp(" +
"IN fname VARCHAR(20), IN lname VARCHAR(20), IN bday DATETIME, OUT empno INT) " +
"BEGIN INSERT INTO emp(first_name, last_name, birthdate) " +
"VALUES(fname, lname, DATE(bday)); SET empno = LAST_INSERT_ID(); END";
cmd.ExecuteNonQuery();
}
catch (MySql.Data.MySqlClient.MySqlException ex)
{
MessageBox.Show("Error " + ex.Number + " has occurred: " + ex.Message,
"Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
It should be noted that, unlike the command-line and GUI
clients, you are not required to specify a special delimiter
when creating stored procedures in Connector/NET.
20.2.4.7.2. Calling a Stored Procedure from Connector/NET
To call a stored procedure using Connector/NET, create a
MySqlCommand object and pass the stored
procedure name as the .CommandText property.
Set the .CommandType property to
CommandType.StoredProcedure.
After the stored procedure is named, create one
MySqlCommand parameter for every parameter in
the stored procedure. IN parameters are
defined with the parameter name and the object containing the
value, OUT parameters are defined with the
parameter name and the datatype that is expected to be returned.
All parameters need the parameter direction defined.
After defining parameters, call the stored procedure by using
the MySqlCommand.ExecuteNonQuery() method:
Visual Basic Example
Dim conn As New MySqlConnection
Dim cmd As New MySqlCommand
conn.ConnectionString = "server=127.0.0.1;" _
& "uid=root;" _
& "pwd=12345;" _
& "database=test"
Try
conn.Open()
cmd.Connection = conn
cmd.CommandText = "add_emp"
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("@lname", 'Jones')
cmd.Parameters["@lname"].Direction = ParameterDirection.Input
cmd.Parameters.Add("@fname", 'Tom')
cmd.Parameters["@fname"].Direction = ParameterDirection.Input
cmd.Parameters.Add("@bday", #12/13/1977 2:17:36 PM#)
cmd.Parameters["@bday"].Direction = ParameterDirection.Input
cmd.Parameters.Add("@empno", MySqlDbType.Int32)
cmd.Parameters["@empno"].Direction = ParameterDirection.Output
cmd.ExecuteNonQuery()
MessageBox.Show(cmd.Parameters["@empno"].Value)
Catch ex As MySqlException
MessageBox.Show("Error " & ex.Number & " has occurred: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
C# Example
MySql.Data.MySqlClient.MySqlConnection conn;
MySql.Data.MySqlClient.MySqlCommand cmd;
conn = new MySql.Data.MySqlClient.MySqlConnection();
cmd = new MySql.Data.MySqlClient.MySqlCommand();
conn.ConnectionString = "server=127.0.0.1;uid=root;" +
"pwd=12345;database=test;";
try
{
conn.Open();
cmd.Connection = conn;
cmd.CommandText = "add_emp";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@lname", "Jones");
cmd.Parameters["@lname"].Direction = ParameterDirection.Input;
cmd.Parameters.Add("@fname", "Tom");
cmd.Parameters["@fname"].Direction = ParameterDirection.Input;
cmd.Parameters.Add("@bday", DateTime.Parse("12/13/1977 2:17:36 PM"));
cmd.Parameters["@bday"].Direction = ParameterDirection.Input;
cmd.Parameters.Add("@empno", MySqlDbType.Int32);
cmd.Parameters["@empno"].Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery();
MessageBox.Show(cmd.Parameters["@empno"].Value);
}
catch (MySql.Data.MySqlClient.MySqlException ex)
{
MessageBox.Show("Error " + ex.Number + " has occurred: " + ex.Message,
"Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
Once the stored procedure is called, the values of output
parameters can be retrieved by using the
.Value property of the
MySqlConnector.Parameters collection.
20.2.4.8. Handling BLOB Data With Connector/NET
Introduction
One common use for MySQL is the storage of binary data in
BLOB columns. MySQL supports four
different BLOB datatypes: TINYBLOB,
BLOB,
MEDIUMBLOB, and
LONGBLOB.
Data stored in a BLOB column can be accessed using Connector/NET
and manipulated using client-side code. There are no special
requirements for using Connector/NET with BLOB data.
Simple code examples will be presented within this section, and a
full sample application can be found in the
Samples directory of the Connector/NET
installation.
20.2.4.8.1. Preparing the MySQL Server
The first step is using MySQL with BLOB data is to configure the
server. Let's start by creating a table to be accessed. In my
file tables, I usually have four columns: an AUTO_INCREMENT
column of appropriate size (UNSIGNED SMALLINT) to serve as a
primary key to identify the file, a VARCHAR column that stores
the file name, an UNSIGNED MEDIUMINT column that stores the size
of the file, and a MEDIUMBLOB column that stores the file
itself. For this example, I will use the following table
definition:
CREATE TABLE file(
file_id SMALLINT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
file_name VARCHAR(64) NOT NULL,
file_size MEDIUMINT UNSIGNED NOT NULL,
file MEDIUMBLOB NOT NULL);
After creating a table, you may need to modify the
max_allowed_packet system variable. This variable determines how
large of a packet (that is, a single row) can be sent to the
MySQL server. By default, the server will only accept a maximum
size of 1MB from our client application. If you do not intend
to exceed 1MB, this should be fine. If you do intend to exceed
1MB in your file transfers, this number has to be increased.
The max_allowed_packet option can be modified using MySQL
Administrator's Startup Variables screen. Adjust the Maximum
allowed option in the Memory section of the Networking tab to an
appropriate setting. After adjusting the value, click the
Apply Changes button and restart the
server using the Service Control screen of
MySQL Administrator. You can also adjust this value directly in
the my.cnf file (add a line that reads max_allowed_packet=xxM),
or use the SET max_allowed_packet=xxM; syntax from within MySQL.
Try to be conservative when setting max_allowed_packet, as
transfers of BLOB data can take some time to complete. Try to
set a value that will be adequate for your intended use and
increase the value if necessary.
20.2.4.8.2. Writing a File to the Database
To write a file to a database we need to convert the file to a
byte array, then use the byte array as a parameter to an
INSERT query.
The following code opens a file using a FileStream object, reads
it into a byte array, and inserts it into the
file table:
Visual Basic Example
Dim conn As New MySqlConnection
Dim cmd As New MySqlCommand
Dim SQL As String
Dim FileSize As UInt32
Dim rawData() As Byte
Dim fs As FileStream
conn.ConnectionString = "server=127.0.0.1;" _
& "uid=root;" _
& "pwd=12345;" _
& "database=test"
Try
fs = New FileStream("c:\image.png", FileMode.Open, FileAccess.Read)
FileSize = fs.Length
rawData = New Byte(FileSize) {}
fs.Read(rawData, 0, FileSize)
fs.Close()
conn.Open()
SQL = "INSERT INTO file VALUES(NULL, @FileName, @FileSize, @File)"
cmd.Connection = conn
cmd.CommandText = SQL
cmd.Parameters.Add("@FileName", strFileName)
cmd.Parameters.Add("@FileSize", FileSize)
cmd.Parameters.Add("@File", rawData)
cmd.ExecuteNonQuery()
MessageBox.Show("File Inserted into database successfully!", _
"Success!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
conn.Close()
Catch ex As Exception
MessageBox.Show("There was an error: " & ex.Message, "Error", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
C# Example
MySql.Data.MySqlClient.MySqlConnection conn;
MySql.Data.MySqlClient.MySqlCommand cmd;
conn = new MySql.Data.MySqlClient.MySqlConnection();
cmd = new MySql.Data.MySqlClient.MySqlCommand();
string SQL;
UInt32 FileSize;
byte[] rawData;
FileStream fs;
conn.ConnectionString = "server=127.0.0.1;uid=root;" +
"pwd=12345;database=test;";
try
{
fs = new FileStream(@"c:\image.png", FileMode.Open, FileAccess.Read);
FileSize = fs.Length;
rawData = new byte[FileSize];
fs.Read(rawData, 0, FileSize);
fs.Close();
conn.Open();
SQL = "INSERT INTO file VALUES(NULL, @FileName, @FileSize, @File)";
cmd.Connection = conn;
cmd.CommandText = SQL;
cmd.Parameters.Add("@FileName", strFileName);
cmd.Parameters.Add("@FileSize", FileSize);
cmd.Parameters.Add("@File", rawData);
cmd.ExecuteNonQuery();
MessageBox.Show("File Inserted into database successfully!",
"Success!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
conn.Close();
}
catch (MySql.Data.MySqlClient.MySqlException ex)
{
MessageBox.Show("Error " + ex.Number + " has occurred: " + ex.Message,
"Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
The Read method of the
FileStream object is used to load the file
into a byte array which is sized according to the
Length property of the FileStream object.
After assigning the byte array as a parameter of the
MySqlCommand object, the
ExecuteNonQuery method is called and the BLOB
is inserted into the file table.
20.2.4.8.3. Reading a BLOB from the Database to a File on Disk
Once a file is loaded into the file table, we
can use the MySqlDataReader class to retrieve
it.
The following code retrieves a row from the
file table, then loads the data into a
FileStream object to be written to disk:
Visual Basic Example
Dim conn As New MySqlConnection
Dim cmd As New MySqlCommand
Dim myData As MySqlDataReader
Dim SQL As String
Dim rawData() As Byte
Dim FileSize As UInt32
Dim fs As FileStream
conn.ConnectionString = "server=127.0.0.1;" _
& "uid=root;" _
& "pwd=12345;" _
& "database=test"
SQL = "SELECT file_name, file_size, file FROM file"
Try
conn.Open()
cmd.Connection = conn
cmd.CommandText = SQL
myData = cmd.ExecuteReader
If Not myData.HasRows Then Throw New Exception("There are no BLOBs to save")
myData.Read()
FileSize = myData.GetUInt32(myData.GetOrdinal("file_size"))
rawData = New Byte(FileSize) {}
myData.GetBytes(myData.GetOrdinal("file"), 0, rawData, 0, FileSize)
fs = New FileStream("C:\newfile.png", FileMode.OpenOrCreate, FileAccess.Write)
fs.Write(rawData, 0, FileSize)
fs.Close()
MessageBox.Show("File successfully written to disk!", "Success!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
myData.Close()
conn.Close()
Catch ex As Exception
MessageBox.Show("There was an error: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
C# Example
MySql.Data.MySqlClient.MySqlConnection conn;
MySql.Data.MySqlClient.MySqlCommand cmd;
MySql.Data.MySqlClient.MySqlDataReader myData;
conn = new MySql.Data.MySqlClient.MySqlConnection();
cmd = new MySql.Data.MySqlClient.MySqlCommand();
string SQL;
UInt32 FileSize;
byte[] rawData;
FileStream fs;
conn.ConnectionString = "server=127.0.0.1;uid=root;" +
"pwd=12345;database=test;";
SQL = "SELECT file_name, file_size, file FROM file";
try
{
conn.Open();
cmd.Connection = conn;
cmd.CommandText = SQL;
myData = cmd.ExecuteReader();
if (! myData.HasRows)
throw new Exception("There are no BLOBs to save");
myData.Read();
FileSize = myData.GetUInt32(myData.GetOrdinal("file_size"));
rawData = new byte[FileSize];
myData.GetBytes(myData.GetOrdinal("file"), 0, rawData, 0, FileSize);
fs = new FileStream(@"C:\newfile.png", FileMode.OpenOrCreate, FileAccess.Write);
fs.Write(rawData, 0, FileSize);
fs.Close();
MessageBox.Show("File successfully written to disk!",
"Success!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
myData.Close();
conn.Close();
}
catch (MySql.Data.MySqlClient.MySqlException ex)
{
MessageBox.Show("Error " + ex.Number + " has occurred: " + ex.Message,
"Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
After connecting, the contents of the file
table are loaded into a MySqlDataReader
object. The GetBytes method of the
MySqlDataReader is used to load the BLOB into a byte array,
which is then written to disk using a FileStream object.
The GetOrdinal method of the MySqlDataReader
can be used to determine the integer index of a named column.
Use of the GetOrdinal method prevents errors if the column order
of the SELECT query is changed.
20.2.4.9. Using Connector/NET with Crystal Reports
Introduction
Crystal Reports is a common tool used by Windows application
developers to perform reporting and document generation. In this
section we will show how to use Crystal Reports XI with MySQL and
Connector/NET.
20.2.4.9.1. Creating a Data Source
When creating a report in Crystal Reports there are two options
for accessing the MySQL data while designing your report.
The first option is to use Connector/ODBC as an ADO data source
when designing your report. You will be able to browse your
database and choose tables and fields using drag and drop to
build your report. The disadvantage of this approach is that
additional work must be performed within your application to
produce a data set that matches the one expected by your report.
The second option is to create a data set in VB.NET and save it
as XML. This XML file can then be used to design a report. This
works quite well when displaying the report in your application,
but is less versatile at design time because you must choose all
relevant columns when creating the data set. If you forget a
column you must re-create the data set before the column can be
added to the report.
The following code can be used to create a data set from a query
and write it to disk:
Visual Basic Example
Dim myData As New DataSet
Dim conn As New MySqlConnection
Dim cmd As New MySqlCommand
Dim myAdapter As New MySqlDataAdapter
conn.ConnectionString = "server=127.0.0.1;" _
& "uid=root;" _
& "pwd=12345;" _
& "database=world"
Try
conn.Open()
cmd.CommandText = "SELECT city.name AS cityName, city.population AS CityPopulation, " _
& "country.name, country.population, country.continent " _
& "FROM country, city ORDER BY country.continent, country.name"
cmd.Connection = conn
myAdapter.SelectCommand = cmd
myAdapter.Fill(myData)
myData.WriteXml("C:\dataset.xml", XmlWriteMode.WriteSchema)
Catch ex As Exception
MessageBox.Show(ex.Message, "Report could not be created", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
C# Example
DataSet myData = new DataSet();
MySql.Data.MySqlClient.MySqlConnection conn;
MySql.Data.MySqlClient.MySqlCommand cmd;
MySql.Data.MySqlClient.MySqlDataAdapter myAdapter;
conn = new MySql.Data.MySqlClient.MySqlConnection();
cmd = new MySql.Data.MySqlClient.MySqlCommand();
myAdapter = new MySql.Data.MySqlClient.MySqlDataAdapter();
conn.ConnectionString = "server=127.0.0.1;uid=root;" +
"pwd=12345;database=test;";
try
{
cmd.CommandText = "SELECT city.name AS cityName, city.population AS CityPopulation, " +
"country.name, country.population, country.continent " +
"FROM country, city ORDER BY country.continent, country.name";
cmd.Connection = conn;
myAdapter.SelectCommand = cmd;
myAdapter.Fill(myData);
myData.WriteXml(@"C:\dataset.xml", XmlWriteMode.WriteSchema);
}
catch (MySql.Data.MySqlClient.MySqlException ex)
{
MessageBox.Show(ex.Message, "Report could not be created",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
The resulting XML file can be used as an ADO.NET XML datasource
when designing your report.
If you choose to design your reports using Connector/ODBC, it
can be downloaded from
dev.mysql.com.
20.2.4.9.2. Creating the Report
For most purposes the Standard Report wizard should help with
the initial creation of a report. To start the wizard, open
Crystal Reports and choose the New > Standard Report option from
the File menu.
The wizard will first prompt you for a data source. If you are
using Connector/ODBC as your data source, use the OLEDB provider
for ODBC option from the OLE DB (ADO) tree instead of the ODBC
(RDO) tree when choosing a data source. If using a saved data
set, choose the ADO.NET (XML) option and browse to your saved
data set.
The remainder of the report creation process is done
automatically by the wizard.
After the report is created, choose the Report Options... entry
of the File menu. Un-check the Save Data With Report option.
This prevents saved data from interfering with the loading of
data within our application.
20.2.4.9.3. Displaying the Report
To display a report we first populate a data set with the data
needed for the report, then load the report and bind it to the
data set. Finally we pass the report to the crViewer control for
display to the user.
The following references are needed in a project that displays a
report:
CrytalDecisions.CrystalReports.Engine
CrystalDecisions.ReportSource
CrystalDecisions.Shared
CrystalDecisions.Windows.Forms
The following code assumes that you created your report using a
data set saved using the code shown in
Section 20.2.4.9.1, “Creating a Data Source”,
and have a crViewer control on your form named
myViewer.
Visual Basic Example
Imports CrystalDecisions.CrystalReports.Engine
Imports System.Data
Imports MySql.Data.MySqlClient
Dim myReport As New ReportDocument
Dim myData As New DataSet
Dim conn As New MySqlConnection
Dim cmd As New MySqlCommand
Dim myAdapter As New MySqlDataAdapter
conn.ConnectionString = _
"server=127.0.0.1;" _
& "uid=root;" _
& "pwd=12345;" _
& "database=test"
Try
conn.Open()
cmd.CommandText = "SELECT city.name AS cityName, city.population AS CityPopulation, " _
& "country.name, country.population, country.continent " _
& "FROM country, city ORDER BY country.continent, country.name"
cmd.Connection = conn
myAdapter.SelectCommand = cmd
myAdapter.Fill(myData)
myReport.Load(".\world_report.rpt")
myReport.SetDataSource(myData)
myViewer.ReportSource = myReport
Catch ex As Exception
MessageBox.Show(ex.Message, "Report could not be created", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
C# Example
using CrystalDecisions.CrystalReports.Engine;
using System.Data;
using MySql.Data.MySqlClient;
ReportDocument myReport = new ReportDocument();
DataSet myData = new DataSet();
MySql.Data.MySqlClient.MySqlConnection conn;
MySql.Data.MySqlClient.MySqlCommand cmd;
MySql.Data.MySqlClient.MySqlDataAdapter myAdapter;
conn = new MySql.Data.MySqlClient.MySqlConnection();
cmd = new MySql.Data.MySqlClient.MySqlCommand();
myAdapter = new MySql.Data.MySqlClient.MySqlDataAdapter();
conn.ConnectionString = "server=127.0.0.1;uid=root;" +
"pwd=12345;database=test;";
try
{
cmd.CommandText = "SELECT city.name AS cityName, city.population AS CityPopulation, " +
"country.name, country.population, country.continent " +
"FROM country, city ORDER BY country.continent, country.name";
cmd.Connection = conn;
myAdapter.SelectCommand = cmd;
myAdapter.Fill(myData);
myReport.Load(@".\world_report.rpt");
myReport.SetDataSource(myData);
myViewer.ReportSource = myReport;
}
catch (MySql.Data.MySqlClient.MySqlException ex)
{
MessageBox.Show(ex.Message, "Report could not be created",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
A new data set it generated using the same query used to
generate the previously saved data set. Once the data set is
filled, a ReportDocument is used to load the report file and
bind it to the data set. The ReportDocument is the passed as the
ReportSource of the crViewer.
This same approach is taken when a report is created from a
single table using Connector/ODBC. The data set replaces the
table used in the report and the report is displayed properly.
When a report is created from multiple tables using
Connector/ODBC, a data set with multiple tables must be created
in our application. This allows each table in the report data
source to be replaced with a report in the data set.
We populate a data set with multiple tables by providing
multiple SELECT statements in our
MySqlCommand object. These SELECT
statements are based on the SQL query shown in Crystal Reports
in the Database menu's Show SQL Query option. Assume the
following query:
SELECT `country`.`Name`, `country`.`Continent`, `country`.`Population`, `city`.`Name`, `city`.`Population`
FROM `world`.`country` `country` LEFT OUTER JOIN `world`.`city` `city` ON `country`.`Code`=`city`.`CountryCode`
ORDER BY `country`.`Continent`, `country`.`Name`, `city`.`Name`
This query is converted to two
SELECT queries and displayed with
the following code:
Visual Basic Example
Imports CrystalDecisions.CrystalReports.Engine
Imports System.Data
Imports MySql.Data.MySqlClient
Dim myReport As New ReportDocument
Dim myData As New DataSet
Dim conn As New MySqlConnection
Dim cmd As New MySqlCommand
Dim myAdapter As New MySqlDataAdapter
conn.ConnectionString = "server=127.0.0.1;" _
& "uid=root;" _
& "pwd=12345;" _
& "database=world"
Try
conn.Open()
cmd.CommandText = "SELECT name, population, countrycode FROM city ORDER BY countrycode, name; " _
& "SELECT name, population, code, continent FROM country ORDER BY continent, name"
cmd.Connection = conn
myAdapter.SelectCommand = cmd
myAdapter.Fill(myData)
myReport.Load(".\world_report.rpt")
myReport.Database.Tables(0).SetDataSource(myData.Tables(0))
myReport.Database.Tables(1).SetDataSource(myData.Tables(1))
myViewer.ReportSource = myReport
Catch ex As Exception
MessageBox.Show(ex.Message, "Report could not be created", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
C# Example
using CrystalDecisions.CrystalReports.Engine;
using System.Data;
using MySql.Data.MySqlClient;
ReportDocument myReport = new ReportDocument();
DataSet myData = new DataSet();
MySql.Data.MySqlClient.MySqlConnection conn;
MySql.Data.MySqlClient.MySqlCommand cmd;
MySql.Data.MySqlClient.MySqlDataAdapter myAdapter;
conn = new MySql.Data.MySqlClient.MySqlConnection();
cmd = new MySql.Data.MySqlClient.MySqlCommand();
myAdapter = new MySql.Data.MySqlClient.MySqlDataAdapter();
conn.ConnectionString = "server=127.0.0.1;uid=root;" +
"pwd=12345;database=test;";
try
{
cmd.CommandText = "SELECT name, population, countrycode FROM city ORDER " +
"BY countrycode, name; SELECT name, population, code, continent FROM " +
"country ORDER BY continent, name";
cmd.Connection = conn;
myAdapter.SelectCommand = cmd;
myAdapter.Fill(myData);
myReport.Load(@".\world_report.rpt");
myReport.Database.Tables(0).SetDataSource(myData.Tables(0));
myReport.Database.Tables(1).SetDataSource(myData.Tables(1));
myViewer.ReportSource = myReport;
}
catch (MySql.Data.MySqlClient.MySqlException ex)
{
MessageBox.Show(ex.Message, "Report could not be created",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
It is important to order the
SELECT queries in alphabetical
order, as this is the order the report will expect its source
tables to be in. One SetDataSource statement is needed for each
table in the report.
This approach can cause performance problems because Crystal
Reports must bind the tables together on the client-side, which
will be slower than using a pre-saved data set.
20.2.4.10. Handling Date and Time Information in Connector/NET
Introduction
MySQL and the .NET languages handle date and time information
differently, with MySQL allowing dates that cannot be represented
by a .NET data type, such as '0000-00-00
00:00:00'. These differences can cause problems if not
properly handled.
In this section we will demonstrate how to properly handle date
and time information when using Connector/NET.
20.2.4.10.1. Problems when Using Invalid Dates
The differences in date handling can cause problems for
developers who use invalid dates. Invalid MySQL dates cannot be
loaded into native .NET DateTime objects,
including NULL dates.
Because of this issue, .NET DataSet objects
cannot be populated by the Fill method of the
MySqlDataAdapter class as invalid dates will
cause a System.ArgumentOutOfRangeException
exception to occur.
20.2.4.10.2. Restricting Invalid Dates
The best solution to the date problem is to restrict users from
entering invalid dates. This can be done on either the client or
the server side.
Restricting invalid dates on the client side is as simple as
always using the .NET DateTime class to
handle dates. The DateTime class will only
allow valid dates, ensuring that the values in your database are
also valid. The disadvantage of this is that it is not useful in
a mixed environment where .NET and non .NET code are used to
manipulate the database, as each application must perform its
own date validation.
Users of MySQL 5.0.2 and higher can use the new
traditional SQL mode to restrict invalid date
values. For information on using the
traditional SQL mode, see
Section 5.1.7, “Server SQL Modes”.
20.2.4.10.3. Handling Invalid Dates
Although it is strongly recommended that you avoid the use of
invalid dates within your .NET application, it is possible to
use invalid dates by means of the
MySqlDateTime datatype.
The MySqlDateTime datatype supports the same
date values that are supported by the MySQL server. The default
behavior of Connector/NET is to return a .NET DateTime object
for valid date values, and return an error for invalid dates.
This default can be modified to cause Connector/NET to return
MySqlDateTime objects for invalid dates.
To instruct Connector/NET to return a
MySqlDateTime object for invalid dates, add
the following line to your connection string:
Allow Zero Datetime=True
Please note that the use of the MySqlDateTime
class can still be problematic. The following are some known
issues:
Data binding for invalid dates can still cause errors (zero
dates like 0000-00-00 do not seem to have this problem).
The ToString method return a date
formatted in the standard MySQL format (for example,
2005-02-23 08:50:25). This differs from
the ToString behavior of the .NET
DateTime class.
The MySqlDateTime class supports NULL
dates, while the .NET DateTime class does not. This can
cause errors when trying to convert a MySQLDateTime to a
DateTime if you do not check for NULL first.
Because of the known issues, the best recommendation is still to
use only valid dates in your application.
20.2.4.10.4. Handling NULL Dates
The .NET DateTime datatype cannot handle
NULL values. As such, when assigning values
from a query to a DateTime variable, you must
first check whether the value is in fact
NULL.
When using a MySqlDataReader, use the
.IsDBNull method to check whether a value is
NULL before making the assignment:
Visual Basic Example
If Not myReader.IsDBNull(myReader.GetOrdinal("mytime")) Then
myTime = myReader.GetDateTime(myReader.GetOrdinal("mytime"))
Else
myTime = DateTime.MinValue
End If
C# Example
if (! myReader.IsDBNull(myReader.GetOrdinal("mytime")))
myTime = myReader.GetDateTime(myReader.GetOrdinal("mytime"));
else
myTime = DateTime.MinValue;
NULL values will work in a data set and can
be bound to form controls without special handling.
20.2.4.11. ASP.NET Provider Model
MySQL Connector/Net provides support for the ASP.NET 2.0 provider
model. This model allows application developers to focus on the
business logic of there application instead of having to recreate
such boilerplate items as membership and roles support. Currently,
only membership and role providers are supplied although session
state and profile providers will be provided in upcoming releases.
Installing The Providers
The installation of Connector/Net 5.1 or later will install the
providers and register them in your machines .NET configuration
file. The providers are implemented in the file
mysql.web.dll and this file can be found in
your Connector/Net installation folder. There is no need to run
any type of SQL script to setup the database as the providers
create and maintain the proper schema automatically.
Using The Providers
The easiest way to start using the providers is to use the ASP.NET
configuration tool that is available on the Solution Explorer
toolbar when you have a website project loaded.
In the web pages that open you will be able to select the MySQL
membership and roles provider by indicating that you want to pick
a custom provider for each area.
When the provider is installed, it creates a dummy connection
string named LocalMySqlServer. This has to be
done so that the provider will work in the ASP.NET configuration
tool. However, you will want to override this connection string in
your web.config file. You do this by first removing the dummy
connection string and then adding in the proper one. Here is an
example:
<connectionStrings>
<remove name="LocalMySqlServer"/>
<add name="LocalMySqlServer" connectionString="server=xxx;uid=xxx;pwd=xxx"/>
</connectionStrings>
Distribution
To use the providers on a production server you will need to
distribute the MySql.Data and the
MySql.Web assemblies and either register them
in the remote systems Global Assembly Cache or keep them in your
applications bin folder.
20.2.4.12. Binary/Nonbinary Issues
There are certain situations where MySQL will return incorrect
metadata about one or more columns. More specifically, the server
will sometimes report that a column is binary when it is not and
vice versa. In these situations, it becomes practically impossible
for the connector to be able to correctly identify the correct
metadat.
Some examples of situations that may return incorrect metadata
are:
Execution of SHOW PROCESSLIST. Some of the
columns will be returned as binary even though they only hold
string data.
When a temp table is used to process a resultset, some columns
may be returned with incorrect binary flags.
Some server functions such DATE_FORMAT will
incorrectly return the column as binary.
With the availability of BINARY and
VARBINARY data types it is important that we
respect the metadata returned by the sever. However, we are aware
that some existing applications may break with this change so we
are creating a connection string option to enable or disable it.
By default, Connector/Net 5.1 will respect the binary flags
returned by the server. This will mean that you may need to make
small changes to your application to accomodate this change.
In the event that the changes required to your application would
be too large, you can add 'respect binary flags=false'
to your connection string. This will cause the connector to use
the prior behavior. In a nutshell, that behavior was that any
column that is marked as string, regardless of binary flags, will
be returned as string. Only columns that are specifically marked
as a BLOB will be returned as
BLOB.
20.2.4.13. Character Sets
Treating Binary Blobs As UTF8
MySQL doesn't currently support 4 byte UTF8 sequences. This makes
it difficult to represent some multi-byte languages such as
Japanese. To try and alleviate this, Connector/Net now supports a
mode where binary blobs can be treated as strings.
To do this, you set the 'Treat Blobs As UTF8' connection string
keyword to yes. This is all that needs to be done to enable
conversion of all binary blobs to UTF8 strings. If you wish to
convert only some of your blob columns, then you can make use of
the 'BlobAsUTF8IncludePattern' and 'BlobAsUTF8ExcludePattern'
keywords. These should be set to the regular expression pattern
that matches the column names you wish to include or exlude
respectively.
One thing to note is that the regular expression patterns can both
match a single column. When this happens, the include pattern is
applied before the exclude pattern. The result, in this case,
would be that the column would be excluded. You should also be
aware that this mode does not apply to columns of type
BINARY or VARBINARY and also
do not apply to nonbinary BLOB columns.
Currently this mode only applies to reading strings out of MySQL.
To insert 4-byte UTF8 strings into blob columns you will need to
use the .NET Encoding.GetBytes function to
convert your string to a series of bytes. You can then set this
byte array as a parameter for a BLOB column.
20.2.4.14. Working with medium trust
.NET applications operate under a given trust level. Normal
desktop applications operate under full trust while web
applications that are hosted in shared environments are normally
run under the medium trust level. Some hosting providers host
shared applications in their own app pools and allow the
application to run under full trust, but this seems to be the
exception rather than the rule.
Connector/Net versions prior to 5.0.8 and 5.1.3 were not
compatible with medium trust hosting. Starting with these
versions, Connector/Net can be used under medium trust hosting
that has been modified to allow the use of sockets for
communication. By default, medium trust does not include
SocketPermission. Connector/Net uses sockets to
talk with the MySQL server so it is required that a new trust
level be created that is an exact clone of medium trust but that
has SocketPermission added.
20.2.5. Connector/NET Support
The developers of Connector/NET greatly value the input of our users
in the software development process. If you find Connector/NET
lacking some feature important to you, or if you discover a bug and
need to file a bug report, please use the instructions in
Section 1.6, “How to Report Bugs or Problems”.
20.2.5.1. Connector/NET Community Support20.2.5.2. How to report Connector/NET Problems or Bugs
If you encounter difficulties or problems with Connector/NET,
contact the Connector/NET community
Section 20.2.5.1, “Connector/NET Community Support”.
You should first try to execute the same SQL statements and
commands from the mysql client program or from
admndemo. This helps you determine whether the
error is in Connector/NET or MySQL.
If reporting a problem, you should ideally include the following
information with the email:
Operating system and version
Connector/NET version
MySQL server version
Copies of error messages or other unexpected output
Simple reproducible sample
Remember that the more information you can supply to us, the more
likely it is that we can fix the problem.
If you believe the problem to be a bug, then you must report the
bug through http://bugs.mysql.com/.
20.2.6. Connector/NET FAQQuestions Questions and Answers 20.2.6.1:
How do I obtain the value of an auto-incremented column?
When using the commandBuilder you should
make sure that you set the
ReturnGeneratedIdentifiers property to
true.
Then, you can use an active view on a table to access the
updated ID. For example:
conn = new MySql.Data.MySqlClient.MySqlConnection();
cmd = new MySql.Data.MySqlClient.MySqlCommand();
da = new MySql.Data.MySqlClient.MySqlDataAdapter();
cmdBuilder = new MySql.Data.MySqlClient.MySqlCommandBuilder();
SystemDataDataSet = new System.Data.DataSet();
SystemDataDataView = new System.Data.DataView();
...
cmd.Connection = conn;
cmd.CommandText = "SELECT * FROM contacts";
da.SelectCommand = cmd;
da.Fill(SystemDataDataSet, "contacts");
cmdBuilder.DataAdapter = da;
cmdBuilder.ReturnGeneratedIdentifiers = true;
cmdBuilder.DataAdapter.SelectCommand.CommandText = "SELECT * FROM contacts";
cmdBuilder.RefreshSchema();
SystemDataDataView = SystemDataDataSet.Tables["contacts"].DefaultView;
SystemDataDataRow = SystemDataDataView.Table.NewRow();
SystemDataDataRow["status"] = 1;
SystemDataDataView.Table.Rows.Add(SystemDataDataRow);
da.Update(SystemDataDataSet, "contacts");
System.Console.WriteLine("ID after update: " + SystemDataDataRow["id"]);
The SystemDataDataRow object in this instance
provides the interface to the updated auto-increment value in
the id column.
20.3. MySQL Visual Studio Plugin
The MySQL Visual Studio Plugin is a DDEX provider; a plug-in for
Visual Studio 2005 that allows developers to maintain database
structures, and supports built-in data-driven application
development tools.
The current version of the MySQL Visual Studio Plugin includes only
database maintenance tools. Data-driven application development
tools are not supported.
The MySQL DDEX Provider operates as a standard extension to the
Visual Studio Data Designer functionality available through the
Server Explorer menu of Visual Studio 2005, and enables developers
to create database objects and data within a MySQL database.
The MySQL Visual Studio Plugin is designed to work with MySQL
version 5.0, but is also compatible with MySQL 4.1.1 and provides
limited compatibility with MySQL 5.1.
20.3.1. Installing the MySQL Visual Studio Plugin
The MySQL Visual Studio Plugin requires one of Visual Studio 2005
Standard, Professional or Team Developer Edition to be installed.
Other editions of Visual Studio 2005 are not supported.
Note
Starting with Connector/NET 5.1.2, the Visual Studio Plugin is
included in the installation. If you have installed
Connector/NET 5.1.2, then you do not need to separately install
the Visual Studio Plugin.
Here is the list of components that should already be installed
before starting the installation of the MySQL Visual Studio
Plugin:
Visual Studio 2005 Standard, Professional or Team Developer
Edition.
MySQL Server 4.1.1 or later (either installed on the same
machine, or a separate server).
MySQL Connector/NET 5.0.
Note
When installing Connector/NET you must ensure that the connector
is installed into the Global Assembly Cache (GAC). The
Connector/NET installer handles this for you automatically, but
in a custom installation the option may have been disabled.
The user used to connect to the MySQL server must have the
following privileges to use the functionality provided by the
MySQL Visual Studio Plugin:
The SELECT privilege for the
INFORMATION_SCHEMA database.
The EXECUTE privilege for the
SHOW CREATE TABLE statement.
The SELECT privilege for the
mysql.proc table (required for operations
with stored procedures and functions).
The SELECT privilege for the
mysql.func table (required for operations
with User Defined Functions (UDF)).
The EXECUTE privilege for the
SHOW ENGINE
STATUS statement (required for retrieving extended
error information).
Appropriate privileges for performed operations (for example,
the SELECT privilege is
required to browse data from a table etc.).
The MySQL Visual Studio Plugin is delivered as a MSI package that
can be used to install, uninstall or reinstall the Provider. If
you are not using Windows XP or Windows Server 2003 you upgrade
the Windows Installer system to the latest version (see
http://support.microsoft.com/default.aspx?scid=kb;EN-US;292539
for details).
The MSI-package is named
MySQL.VisualStudio.msi. To install the MySQL
Visual Studio Plugin, right click on the MSI file and select
. The installation process is as follow:
The standard Welcome dialog is opened. Click Next to continue
installation.
The License agreement (GNU GPL) window is opened. Accept the
agreement and click Next to continue.
The destination folder choice dialog is opened. Here you can
point out the folder where the MySQL Visual Studio Plugin will
be installed. The default destination folder is
%ProgramFilesDir%\MySQL\MySQL DDEX Data
Provider, where
%ProgramFilesDir% is the Program Files
folder of the installation machine. After choosing the
destination folder, click Next to
continue.
The installer will ask to confirm that installation. Click
Install to start installation process.
The installation will now take place. At the end of this step
the Visual Studio command table is rebuilt (this process may
take several minutes).
Once installation is complete, click
Finish to end the installation process.
To uninstall the MySQL Visual Studio Plugin, you can use either
Add/Remove Programs component of the Control Panel or the same
MSI-package. Choose the Remove option, and
the Provider will be uninstalled automatically.
To repair the Provider, right click the MSI-package and choose the
option. The MySQL Visual Studio Plugin
will be repaired automatically.
The installation package includes the following files:
MySQL.VisualStudio.dll — the MySQL
DDEX Provider assembly.
MySQL.Data.dll — the assembly
containing the MySQL Connector .NET which is used by the
Provider.
MySql.VisualStudio.dll.config — the
configuration file for the MySQL Visual Studio Plugin. This
file contains default values for the provider GUI layout.
Note
Do not remove this file before the first use of the
Provider.
Register.reg — the file with
registry entries that can be used to register the MySQL DDEX
Provider in the case of the manual installation.
Install.js — the script used to
register the Connector .NET as an ADO.NET data provider in the
machine.config file.
Release notes.doc — the document
with release notes.
To install the Provider manually, copy all files of the
installation package in a desired folder, then set the full path
to the Provider assembly as a value of the CodeBase entry. For
example:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\Packages\{79A115C9-B133-4891-9E7B-242509DAD272}]@="MySql.Data.VisualStudio.MySqlDataProviderPackage"
"InprocServer32"="C:\\WINNT\\system32\\mscoree.dll"
"Class"="MySql.Data.VisualStudio.MySqlDataProviderPackage"
"CodeBase"="C:\\MySqlDdexProvider\\MySql.VisualStudio.dll"
Then import information from the Register.reg file to the registry
by clicking of the file. At the confirmation dialog choose Yes.
Next you must run the command devenv.exe /setup within a Command
Prompt to rebuild the Visual Studio command table.
20.3.2. Creating a connection to the MySQL server
Once the MySQL Visual Studio Plugin is installed, you can use it
to create, modify and delete connections to MySQL databases. To
create a connection with a MySQL database, perform the following
steps:
Start Visual Studio 2005 and open Server Explorer window by
choosing the option from
the menu.
Right click on the Data Connections node
and choose the Add Connection button.
The Add Connection dialog is opened. Press the
Change button to choose MySQL Database
as a data source.
Change Data Source dialog is opened. Choose MySQL Database in
the list of data sources (or the other
option, if MySQL Database is absent), and then choose
.NET Framework Data Provider for MySQL in
the combo box of data providers.
Press OK to confirm your choice.
Enter the connection settings: the server host name (for
example, localhost if the MySQL server is installed on the
local machine), the user name, the password, and the default
database schema. Note that you must specify the default schema
name to open the connection.
You can also set the port to connect with the MySQL server by
pressing the Advanced button. To test a
connection with the MySQL server, ser the server host name,
the user name, and the password, and press the Test
Connection button. If the test fails, check the
connection values that you have supplied are correct and that
the corresponding user and privileges have been configured on
the MySQL server.
After you set all settings and test the connection, press
OK. The newly created connection is
displayed in Server Explorer. Now you can work with the MySQL
server through standard Server Explorer interface.
After a connection is successfully established, all the connection
settings are saved. When you next open Visual Studio, the
connection to the MySQL server will appear within Server Explorer
so that you can re-establish a connection to the MySQL server.
To modify and delete a connection, use the context menu for the corresponding node. You
can modify any of the settings just by overwriting the existing
values with new ones. Note that a connection should be modified or
deleted only if no active editor for its objects is opened.
Otherwise your data could be lost.
20.3.3. Using the MySQL Visual Studio Plugin
To work with a MySQL server using the MySQL Visual Studio Plugin,
open the Visual Studio 2005, open the |