`

C# 连接MySQL数据库并进行相关操作

阅读更多

C# 连接MySQL数据库并进行相关操作

 

       之前在C#使用OleDb读取Excel,生成SQL语句 中只是生成SQL语句,没有连接数据库执行。后面举得这样不方便,让改成直接插入数据库,还将了生成对应的实体类的功能。

       C#连接数据库方法有很多,在①中说道了三种连接数据方法和示例,我采用的是MySQL自己的组件mysql.data.dll来连接数据库的,并封装了一些函数,虽然只用到了GetSchema(取出数据的表)和ExecuteSQLFile(执行sql文件)两个功能,其他具体的功能可以参考官方的Document。

 

 

       当然一般都不会一次搞定了,在生成实体类的要获取表的字段信息,就出现获取的字段为null,后面自己琢磨和测试,发现是GetSchema中的字符串数组参数和文档中规定的顺序不一致,所以无法匹配,就返回null。下面是代码:

DataTable dt = dbhelper.GetSchema("Databases"),dt1;
            TreeNode tn,tn1;
            string temp;
            foreach(DataRow dr in dt.Rows)
            {
                temp = dr[1].ToString();
                tn = new MyNode(dbhelper, temp);
                //tn.Text = temp;
                dt1 = dbhelper.GetSchema("Tables",new string[4]{null,temp,null,null});
                foreach (DataRow dr1 in dt1.Rows)
                {
                    tn1 = new MyNode(dbhelper,dr1[2].ToString());
                    tn.Nodes.Add(tn1);
                }
                tv.Nodes.Add(tn);
            }

       另外一个功能,其实是Excel文件导出SQL语句,然后执行,代码很简单,在下面的ExecuteSQLFile函数可以看到,但是也碰到了一个问题:

在 MySql.Data.MySqlClient.MySqlStream.ReadPacket()

   在 MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int64& insertedId)

   在 MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId, Int32& affectedRows, Int64& insertedId)

   在 MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force)

   在 MySql.Data.MySqlClient.MySqlDataReader.NextResult()

   在 MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)

   在 MySql.Data.MySqlClient.MySqlCommand.ExecuteReader()

   在 MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery()

   在 ReadXlsxData.DBConnect.ExecuteSQLFile(String fileName) 

 

       对我这个完全没有数据库经验的来说,根本看不到问题所在,只有google,虽然在stackoverflow上有这个问题但是没有解决,无奈之下,只有自己琢磨,在google到②文章,看了下,好像看到有说版本的问题,然后我就索性下载最新的mysql.data.dll,竟然出现是数据库未连接成功,原因是在我XML解析的时候错误。然后修改这部分竟然就执行成功了。

 

       惊喜之余,附上网上找(支持Insert,Update,Backup,Restore,Delete,Select等操作,完全可以自己加工写一个图形界面数据库管理工具了哈)加我写ExecuteSQLFile的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.IO;
//Add MySql Library
using MySql.Data.MySqlClient;
using System.Data;

namespace ReadXlsxData
{
    class DBConnect
    {
        private MySqlConnection connection;
        private string server;
        private string database;
        private string uid;
        private string password;
        private string port;
        //private string database;



        //Initialize values
        public void Initialize(string server, string database,string uid, string password, string port)
        {
            //server = "localhost";
            //database = "connectcsharptomysql";
            //uid = "username";
            //password = "password";
            this.server = server;
            this.uid = uid;
            this.password = password;
            this.port = port;
            this.database = database;
            string connectionString = "Data Source=" + server + ";" + "port=" + port + ";" + "Database=" + database + ";" + "User Id=" + uid + ";" + "Password=" + password + ";" + "CharSet = utf8"; ;
            connection = new MySqlConnection(connectionString);
        }


        //open connection to database
        public bool OpenConnection()
        {
            try
            {
                connection.Open();
                return true;
            }
            catch (MySqlException ex)
            {
                //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:
                //0: Cannot connect to server.
                //1045: Invalid user name and/or password.
                switch (ex.Number)
                {
                    case 0:
                        MessageBox.Show("Cannot connect to server.  Contact administrator");
                        break;

                    case 1045:
                        MessageBox.Show("Invalid username/password, please try again");
                        break;
                }
                return false;
            }
        }

        //Close connection
        public bool CloseConnection()
        {
            try
            {
                connection.Close();
                return true;
            }
            catch (MySqlException ex)
            {
                MessageBox.Show(ex.Message);
                return false;
            }
        }

        public DataTable GetSchema(string str, string[] restri)
        {
            return connection.GetSchema(str, restri);
        }
        public DataTable GetSchema(string str)
        {
            return connection.GetSchema(str);
        }
        // Get Database List

        //Insert statement
        public void Insert()
        {
            string query = "INSERT INTO tableinfo (name, age) VALUES('John Smith', '33')";

            //open connection
            if (this.OpenConnection() == true)
            {
                //create command and assign the query and connection from the constructor
                MySqlCommand cmd = new MySqlCommand(query, connection);
                //Execute command
                cmd.ExecuteNonQuery();
                //close connection
                this.CloseConnection();
            }
        }

        //Update statement
        public void Update()
        {
            string query = "UPDATE tableinfo SET name='Joe', age='22' WHERE name='John Smith'";

            //Open connection
            if (this.OpenConnection() == true)
            {
                //create mysql command
                MySqlCommand cmd = new MySqlCommand();
                //Assign the query using CommandText
                cmd.CommandText = query;
                //Assign the connection using Connection
                cmd.Connection = connection;

                //Execute query
                cmd.ExecuteNonQuery();

                //close connection
                this.CloseConnection();
            }
        }

        //Delete statement
        public void Delete()
        {
            string query = "DELETE FROM tableinfo WHERE name='John Smith'";

            if (this.OpenConnection() == true)
            {
                MySqlCommand cmd = new MySqlCommand(query, connection);
                cmd.ExecuteNonQuery();
                this.CloseConnection();
            }
        }

        //Select statement
        public List<string>[] Select()
        {
            string query = "SELECT * FROM tableinfo";

            //Create a list to store the result
            List<string>[] list = new List<string>[3];
            list[0] = new List<string>();
            list[1] = new List<string>();
            list[2] = new List<string>();

            //Open connection
            if (this.OpenConnection() == true)
            {
                //Create Command
                MySqlCommand cmd = new MySqlCommand(query, connection);
                //Create a data reader and Execute the command
                MySqlDataReader dataReader = cmd.ExecuteReader();

                //Read the data and store them in the list
                while (dataReader.Read())
                {
                    list[0].Add(dataReader["id"] + "");
                    list[1].Add(dataReader["name"] + "");
                    list[2].Add(dataReader["age"] + "");
                }
                //close Data Reader
                dataReader.Close();
                //close Connection
                this.CloseConnection();
                //return list to be displayed
                return list;
            }
            else
            {
                return list;
            }
        }

        //Count statement
        public int Count()
        {
            string query = "SELECT Count(*) FROM tableinfo";
            int Count = -1;
            //Open Connection
            if (this.OpenConnection() == true)
            {
                //Create Mysql Command
                MySqlCommand cmd = new MySqlCommand(query, connection);

                //ExecuteScalar will return one value
                Count = int.Parse(cmd.ExecuteScalar() + "");
                //close Connection
                this.CloseConnection();
                return Count;
            }
            else
            {
                return Count;
            }
        }

        //Backup
        public void Backup()
        {
            try
            {
                DateTime Time = DateTime.Now;
                int year = Time.Year;
                int month = Time.Month;
                int day = Time.Day;
                int hour = Time.Hour;
                int minute = Time.Minute;
                int second = Time.Second;
                int millisecond = Time.Millisecond;

                //Save file to C:\ with the current date as a filename
                string path;
                path = "C:\\" + year + "-" + month + "-" + day + "-" + hour + "-" + minute + "-" + second + "-" + millisecond + ".sql";
                StreamWriter file = new StreamWriter(path);


                ProcessStartInfo psi = new ProcessStartInfo();
                psi.FileName = "mysqldump";
                psi.RedirectStandardInput = false;
                psi.RedirectStandardOutput = true;
                psi.Arguments = string.Format(@"-u{0} -p{1} -h{2} {3}", uid, password, server, database);
                psi.UseShellExecute = false;

                Process process = Process.Start(psi);

                string output;
                output = process.StandardOutput.ReadToEnd();
                file.WriteLine(output);
                process.WaitForExit();
                file.Close();
                process.Close();
            }
            catch (IOException ex)
            {
                MessageBox.Show("Error , unable to backup!");
            }
        }

        //Restore
        public void Restore()
        {
            try
            {
                //Read file from C:\
                string path;
                path = "C:\\MySqlBackup.sql";
                StreamReader file = new StreamReader(path);
                string input = file.ReadToEnd();
                file.Close();


                ProcessStartInfo psi = new ProcessStartInfo();
                psi.FileName = "mysql";
                psi.RedirectStandardInput = true;
                psi.RedirectStandardOutput = false;
                psi.Arguments = string.Format(@"-u{0} -p{1} -h{2} {3}", uid, password, server, database);
                psi.UseShellExecute = false;

                Process process = Process.Start(psi);
                process.StandardInput.WriteLine(input);
                process.StandardInput.Close();
                process.WaitForExit();
                process.Close();
            }
            catch (IOException ex)
            {
                MessageBox.Show("Error , unable to Restore!");
            }
        }
        //Execute Sql File
        public void ExecuteSQLFile(string fileName)
        {
            string sql = File.ReadAllText(fileName, Encoding.UTF8);
            MySqlCommand myCommand = new MySqlCommand(sql);
            myCommand.Connection = connection;
            if (this.OpenConnection() == true)
            {
                myCommand.ExecuteNonQuery();
                //MessageBox.Show("..........");
                this.CloseConnection();
            }
            

        }

    }
}

       

       连接数据库,生成数据库表树(界面图),是参照网上一个软件做的,因为没有给代码,就自己参照着来山寨了一把:

   

小结:

       其实我到现在对数据库和SQL语句都不了解,因为之前大学没有学过,虽然工作中在服务器业务中也有用到SQL语句,但还是不熟。所以在上面初始化数据库连接语句时:

string connectionString = "Data Source=" + server + ";" + "port=" + port + ";" + "Database=" + database + ";" + "User Id=" + uid + ";" + "Password=" + password + ";" + "CharSet = utf8"; 

 这个,我之前的一个版本不是这么写的, Data Source 原来是 Server 而 User Id 原来是uid ,因为不懂,只能是哪个行就到哪,想着等着有时间好好琢磨下。

       数据库操作或SQL语句其实不难,实际工作也很少会说考虑性能这方面的东西,对数据库的内部工作原理没有个谱,用起来只能依葫芦画瓢,跟写上面数据库连接语句,我只有去google,找下人家怎么写,或者是去找官方的Example。所以希望以后能对数据库知根知底,如果您有这方面的什么推荐,希望能收到您的留言,谢谢!

 

        转载在文首注明出处:http://dsqiu.iteye.com/blog/1964567

更多精彩请关注D.S.Qiu的博客和微博(ID:静水逐风)

 

参考:

 ①C#+Mysql+Mono:http://blog.donews.com/monoer/archive/2006/06/06/904285.aspx

easy5: http://www.cnblogs.com/easy5weikai/archive/2012/12/06/2805558.html

  • 大小: 19 KB
0
0
分享到:
评论

相关推荐

    C# 连接mysql数据库

    总之,C#连接MySQL数据库涉及的关键知识点包括:引用MySQL驱动程序、创建连接字符串、使用ADO.NET对象进行连接和数据操作。理解并掌握这些基础,开发者就能在C#应用程序中实现与MySQL数据库的高效交互。

    C# 连接MySql数据库,显示数据表

    本文将详细讲解如何使用C#连接MySQL数据库,并将数据映射到界面上显示。 首先,我们需要安装必要的库。在C#中,我们可以使用`MySql.Data.MySqlClient`库来连接MySQL数据库。你可以通过NuGet包管理器来安装这个库,...

    C#连接Mysql数据库的DLL

    在本案例中,提供的压缩包包含了用于C#连接MySQL数据库的DLL文件。 1. **MySQL Connector/NET**: MySQL Connector/NET是MySQL官方提供的.NET数据提供者,它实现了ADO.NET接口,使得C#开发者可以方便地使用.NET...

    C#连接操作MySQL数据库进行添加、修改、删除、查询等操作的演示

    现本着学习的目的,将c#访问操作MySQL数据库进行添加、删除、修改、显示等操作进行梳理。以Visual Studio 2012平台下的示例形式写下来,供以后查看。 一、新建一个Windows 窗体应用程序Test。 如下图所示: 二、...

    C#连接MySql数据库的两种方法

    ### C#连接MySql数据库的两种方法 #### 一、使用 MySQLDriverCS 连接 MySQL 数据库 **1. 下载与安装 MySQLDriverCS** 为了使用 MySQLDriverCS 来连接 MySQL 数据库,首先需要下载并安装 MySQLDriverCS。可以从...

    C#实现Mysql数据库操作实例(含源码)

    在进行C#开发前,首先需要安装MySQL的.NET数据提供者(MySQL Connector/Net),这是C#连接MySQL数据库的桥梁。你可以从MySQL官网下载并安装最新版本的驱动。 2. **连接字符串**: 创建数据库连接是操作MySQL的第...

    C#连接MySQL数据库代码示例

    首先,要实现C#连接MySQL数据库,我们需要引入ADO.NET库,它是.NET框架的一部分,提供了一组用于与各种数据库进行交互的数据访问组件。在C#项目中,我们需要添加对`MySql.Data` NuGet包的引用,它包含了MySQL连接所...

    C#连接操作MySQL数据库进行添加、修改、删除、查询、批量导入、异步处理等操作的演示代码

    现本着学习的目的,将c#访问操作MySQL数据库进行添加、删除、修改、显示等操作进行梳理。形成代码,以Visual Studio 2012平台下的示例形式写下来,供以后查看。同时实现了数据库查询,BindingSource绑定控件、...

    c# mysql数据库连接池实现

    本文将深入探讨如何在C#中使用MySQL数据库连接池。 首先,我们需要了解什么是数据库连接池。数据库连接池是一种资源管理技术,它预先创建并维护一定数量的数据库连接,当应用需要时,可以从池中获取连接,使用完毕...

    C#连接MySQL数据库驱动类库

    本文将深入探讨"C#连接MySQL数据库驱动类库",包括如何安装、配置、以及使用这些驱动来执行数据库操作。 1. **MySQL Connector/NET**: MySQL Connector/NET是MySQL官方提供的用于.NET Framework和.NET Core的驱动...

    C# MySQL数据库例子源码.rar

    标题"C# MySQL数据库例子源码.rar"表明这个压缩包包含了一些示例代码,用于演示如何在C#应用程序中连接并操作MySQL数据库。这可能包括创建连接、执行SQL查询、插入、更新和删除数据等基本操作。 描述中提到,这是一...

    C#操作mysql数据库的封装类

    C#操作mysql数据库的封装类,带注释,代码完整,适合企业级开发

    C#连接MYSQL数据库

    以下将详细介绍C#连接MySQL数据库的过程以及如何使用Navicat进行数据库连接。 首先,安装MySQL数据库是基础步骤。你需要访问MySQL官网下载适合你操作系统版本的MySQL安装包,并按照向导进行安装。安装过程中,你...

    ADO.NET C# 连接MySQL数据库的类库 非常好用的哦!

    首先,MySQLDriverCS是一个非官方的C#驱动,用于连接MySQL数据库,它为C#程序员提供了与MySQL服务器通信的接口。确保你已下载了这个驱动的DLL文件,如4fcom-20080313-15,这是驱动程序的二进制组件,需要添加到你的...

    C# 连接MySQL 数据库 实例

    以上就是使用C#连接MySQL数据库并显示查询结果的基本步骤。这个过程中的关键知识点包括:配置连接字符串、创建和打开数据库连接、执行SQL命令、使用`MySqlDataReader`读取数据、以及将数据绑定到UI控件。理解并掌握...

    C# 服务,监控Mysql数据库并执行操作

    C# 服务,监控Mysql数据库并执行操作 安装服务后,可在Windows服务看到所安装的服务 启动服务后,可执行数据库操作,具体连接数据库下载后可连接自己的数据库测试,执行数据库操作的语句可自行去修改。 仅供参考

    基于c#+Mysql数据库的房屋租赁管理系统源码+项目说明+报告.zip

    【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,...基于c#+Mysql数据库的房屋租赁管理系统源码+项目说明+报告.zip

    C#连接MYSQL示例代码

    在IT行业中,数据库连接是应用程序开发中的重要环节。...这个简单的示例只是一个起点,帮助你理解如何使用C#连接和操作MySQL数据库。通过深入学习和实践,你可以构建更复杂、更健壮的数据库应用程序。

    c#连接MYSQL数据库

    本教程将深入讲解如何使用C#连接MySQL数据库,并进行数据清理操作。 首先,确保已安装了MySQL的.NET数据提供程序,这是连接C#与MySQL的桥梁。可以通过NuGet包管理器安装`MySql.Data`库,运行以下命令: ``` ...

    C#实现MySQL数据库的备份、还原和初始化

    总结起来,C#实现MySQL数据库的备份、还原和初始化主要涉及对数据库操作的封装,通过执行命令行工具(如`mysqldump`和`mysql`)来完成数据库的生命周期管理。理解这些基本操作对任何使用C#与MySQL交互的开发者来说都...

Global site tag (gtag.js) - Google Analytics