之前在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
相关推荐
总之,C#连接MySQL数据库涉及的关键知识点包括:引用MySQL驱动程序、创建连接字符串、使用ADO.NET对象进行连接和数据操作。理解并掌握这些基础,开发者就能在C#应用程序中实现与MySQL数据库的高效交互。
本文将详细讲解如何使用C#连接MySQL数据库,并将数据映射到界面上显示。 首先,我们需要安装必要的库。在C#中,我们可以使用`MySql.Data.MySqlClient`库来连接MySQL数据库。你可以通过NuGet包管理器来安装这个库,...
在本案例中,提供的压缩包包含了用于C#连接MySQL数据库的DLL文件。 1. **MySQL Connector/NET**: MySQL Connector/NET是MySQL官方提供的.NET数据提供者,它实现了ADO.NET接口,使得C#开发者可以方便地使用.NET...
现本着学习的目的,将c#访问操作MySQL数据库进行添加、删除、修改、显示等操作进行梳理。以Visual Studio 2012平台下的示例形式写下来,供以后查看。 一、新建一个Windows 窗体应用程序Test。 如下图所示: 二、...
### C#连接MySql数据库的两种方法 #### 一、使用 MySQLDriverCS 连接 MySQL 数据库 **1. 下载与安装 MySQLDriverCS** 为了使用 MySQLDriverCS 来连接 MySQL 数据库,首先需要下载并安装 MySQLDriverCS。可以从...
在进行C#开发前,首先需要安装MySQL的.NET数据提供者(MySQL Connector/Net),这是C#连接MySQL数据库的桥梁。你可以从MySQL官网下载并安装最新版本的驱动。 2. **连接字符串**: 创建数据库连接是操作MySQL的第...
首先,要实现C#连接MySQL数据库,我们需要引入ADO.NET库,它是.NET框架的一部分,提供了一组用于与各种数据库进行交互的数据访问组件。在C#项目中,我们需要添加对`MySql.Data` NuGet包的引用,它包含了MySQL连接所...
现本着学习的目的,将c#访问操作MySQL数据库进行添加、删除、修改、显示等操作进行梳理。形成代码,以Visual Studio 2012平台下的示例形式写下来,供以后查看。同时实现了数据库查询,BindingSource绑定控件、...
本文将深入探讨如何在C#中使用MySQL数据库连接池。 首先,我们需要了解什么是数据库连接池。数据库连接池是一种资源管理技术,它预先创建并维护一定数量的数据库连接,当应用需要时,可以从池中获取连接,使用完毕...
C#操作mysql数据库的封装类,带注释,代码完整,适合企业级开发
本文将深入探讨"C#连接MySQL数据库驱动类库",包括如何安装、配置、以及使用这些驱动来执行数据库操作。 1. **MySQL Connector/NET**: MySQL Connector/NET是MySQL官方提供的用于.NET Framework和.NET Core的驱动...
标题"C# MySQL数据库例子源码.rar"表明这个压缩包包含了一些示例代码,用于演示如何在C#应用程序中连接并操作MySQL数据库。这可能包括创建连接、执行SQL查询、插入、更新和删除数据等基本操作。 描述中提到,这是一...
以下将详细介绍C#连接MySQL数据库的过程以及如何使用Navicat进行数据库连接。 首先,安装MySQL数据库是基础步骤。你需要访问MySQL官网下载适合你操作系统版本的MySQL安装包,并按照向导进行安装。安装过程中,你...
首先,MySQLDriverCS是一个非官方的C#驱动,用于连接MySQL数据库,它为C#程序员提供了与MySQL服务器通信的接口。确保你已下载了这个驱动的DLL文件,如4fcom-20080313-15,这是驱动程序的二进制组件,需要添加到你的...
以上就是使用C#连接MySQL数据库并显示查询结果的基本步骤。这个过程中的关键知识点包括:配置连接字符串、创建和打开数据库连接、执行SQL命令、使用`MySqlDataReader`读取数据、以及将数据绑定到UI控件。理解并掌握...
C# 服务,监控Mysql数据库并执行操作 安装服务后,可在Windows服务看到所安装的服务 启动服务后,可执行数据库操作,具体连接数据库下载后可连接自己的数据库测试,执行数据库操作的语句可自行去修改。 仅供参考
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,...基于c#+Mysql数据库的房屋租赁管理系统源码+项目说明+报告.zip
在IT行业中,数据库连接是应用程序开发中的重要环节。...这个简单的示例只是一个起点,帮助你理解如何使用C#连接和操作MySQL数据库。通过深入学习和实践,你可以构建更复杂、更健壮的数据库应用程序。
本教程将深入讲解如何使用C#连接MySQL数据库,并进行数据清理操作。 首先,确保已安装了MySQL的.NET数据提供程序,这是连接C#与MySQL的桥梁。可以通过NuGet包管理器安装`MySql.Data`库,运行以下命令: ``` ...
总结起来,C#实现MySQL数据库的备份、还原和初始化主要涉及对数据库操作的封装,通过执行命令行工具(如`mysqldump`和`mysql`)来完成数据库的生命周期管理。理解这些基本操作对任何使用C#与MySQL交互的开发者来说都...