在学习了C#与数据库访问技术总结(七)综合示例,尝试用连接MySql和使用ODBC。

1> 使用到的工具

在操作数据库之前,首先需要建立数据库,并创建表。

navicat.exe--->用来管理MySql数据库

Microsoft SQL Server Management Studio--->用来管理Sql数据库

用上面的工具分别为MySql和Sql创建数据库Student和StudentInfo表。表中的内容比较简单,如下


2> 连接MySql with net mode

如果连接的是Mysql数据库,需要引用MySql.Data.dll文件,该文件在MySQL Connector中。参考网址:http://blog.csdn.net/koastal/article/details/52456785。有两种方式使用MySql,Connector/ODBC和Connector/Net。网址中使用的是Net方式。目前在连接MySql过程中貌似必须使用用户名和密码。还不能像C#与数据库访问技术总结(七)综合示例中连接SQL中使用SSPI,即windows用户登录。


3> 连接Mysql with ODBC Unicode

通过网址https://dev.mysql.com/downloads/connector/odbc/下载。参考网址http://www.cnblogs.com/joe-yang/archive/2008/10/23/1318264.html进行配置。本次选择ODBCUnicodedriver。

打开控制面板->管理工具-> ODBC 数据源(32 位),做如下配置。记住下图红框中MySQL ODBC5.3 Unicode Driver,后面程序中的Driver要赋成此值。


点击Test会弹出连接成功标志。

注意:此时数据库名如果用Initial Catalog来引导,会出现如下错误,使用database解决。


问题:

mysql-connector-odbc有32位,64位,应该选择安装哪个?

我一开始以为电脑是64位系统,因此就装了一个64位的,配置好ODBC后,连接出现如下错误:


“未发现数据源名称并且未指定默认驱动程序”。

在C:\Windows目录下有两个文件ODBC.INI和ODBCINST.INI,内部显示的ODBC是32位,后搜索在网址http://tieba.baidu.com/p/3243507049获得答案。

通过查看C:\Windows\SysWOW64下odbcad32.exe,发现是32位的。随将64位ODBC卸载,安装32位ODBC,重新配置,连接成功。

4> 连接SQL数据库

直接看后面代码

5> 连接SQL with ODBC

添加ODBC驱动参照2中的方法添加。

按照网址配置http://blog.csdn.net/a_sungirl/article/details/17962943,其中服务器可以写成localhost,更改默认的数据库为student。

新建用户的属性设置参考下图。







6> 代码如下

窗体上的控件布局如下


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
using System.Data.SqlClient;
using System.Data.Odbc;
namespace studentDataBase
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnMysqlWithNet_Click(object sender, EventArgs e)
        {
            try
            {
                string commandText = "select count(*) from studentInfo";
                string connString = "server=localhost;Initial Catalog=Student;Uid=MySqlTest;pwd=123456";
                MySqlConnection conn = new MySqlConnection();
                conn.ConnectionString = connString;
                MySqlCommand cmd = new MySqlCommand(commandText, conn);
                conn.Open();
                string count = cmd.ExecuteScalar().ToString();
                conn.Close();
                this.label1.Text = "MySql with net 连接成功,共有" + count + "位学生";
            }
            catch (Exception ex)
            {
                MessageBox.Show("MySql数据库连接失败"+ ex.Message);
            }
        }

        private void btnMySqlWithODBC_Click(object sender, EventArgs e)
        {
            try
            {
                string commandText = "select count(*) from studentInfo";
                string connString = "Driver={MySQL ODBC 5.3 Unicode Driver};server=localhost;Database=Student;Uid=MySqlTest;pwd=123456";
                OdbcConnection conn = new OdbcConnection(connString);
                OdbcCommand cmd = new OdbcCommand(commandText, conn);
                conn.Open();
                string count = cmd.ExecuteScalar().ToString();
                conn.Close();
                this.label1.Text = "MySql with odbc 连接成功,共有" + count + "位学生";
            }
            catch (Exception ex)
            {
                MessageBox.Show("MySql数据库连接失败" + ex.Message);
            }
        }

        private void btnSql_Click(object sender, EventArgs e)
        {
            try
            {
                string commandText = "select count(*) from studentInfo";
                string connString = "server=(local);Initial Catalog=Student;Integrated Security=SSPI;";
                SqlConnection conn = new SqlConnection();
                conn.ConnectionString = connString;
                SqlCommand cmd = new SqlCommand(commandText, conn);
                conn.Open();
                string count = cmd.ExecuteScalar().ToString();
                conn.Close();
                this.label1.Text = "Sql with net 连接成功,共有" + count + "位学生";
            }
            catch (Exception ex)
            {
                MessageBox.Show("Sql数据库连接失败" + ex.Message);
            }
        }

        private void btnSqlODBC_Click(object sender, EventArgs e)
        {
            try
            {
                string commandText = "select count(*) from studentInfo";
                string connString = "Driver={ODBC Driver 13 for SQL Server};server=localhost;Database=Student;Uid=MySqlTest;pwd=123456";
                // string connString = "Driver={ODBC Driver 13 for SQL Server};server=(local);Initial Catalog=Student;Integrated Security=SSPI;";
                OdbcConnection conn = new OdbcConnection(connString);
                OdbcCommand cmd = new OdbcCommand(commandText, conn);
                conn.Open();
                string count = cmd.ExecuteScalar().ToString();
                conn.Close();
                this.label1.Text = "Sql with odbc 连接成功,共有" + count + "位学生";
            }
            catch (Exception ex)
            {
                MessageBox.Show("Sql数据库连接失败" + ex.Message);
            }
        }
    }
}

7> 后续

1> 在整个过程中,会出现许多问题,虽然可以连接到Mysql和Sql数据库了。但是<SQL Server 2016 配置管理器>打开依然会报下面的错误。

过程中曾经解决了"MMC无法创建管理单元"但和下图CLSID不一样的一个问题,但是卸载了电脑上的sql2012,2014中的程序后,就有出错了。

2> 还有就是用ODBC连接Sql时必须是用户名和密码登录,不能使用windows自动登录。

3> Mysql连接时貌似用windows登录一致不行。



Logo

更多推荐