缘起 由于一些特别的原因,我再次短暂的回到 Windows ,回到了 VisualStudio2010 和 C# 。习惯了 Ubuntu/Linux 的快速高效的开发环境,对 Windows 下的开发工具的庞大臃肿反应慢既愤慨又无奈。由于不想使用和 VisaulStudio2010 相同的臃肿的开发环境,就使用
缘起
由于一些特别的原因,我再次短暂的回到 Windows ,回到了 Visual Studio 2010 和 C# 。习惯了 Ubuntu/Linux 的快速高效的开发环境,对 Windows 下的开发工具的庞大臃肿反应慢既愤慨又无奈。由于不想使用和 Visaul Studio 2010 相同的臃肿的开发环境,就使用 C#+Mysql 这个组合。以下是一些记录。
正文
连接数据库最重要是找到驱动程序, ODBC 、JDBC是数据库连接的接口的标准,实现这些接口称为驱动程序。无论什么语言何种平台,都需要连接数据库都需要相应的驱动器。比如连接 Mysql 数据库, Java 就需要 Java 的连接器, .NET 就需要 .NET 的连接器,像 Ruby 这类的脚本程序也需要相应的数据库连接包。
关于在 Windows 下用 C# 开发应用程序,如果是 ASP.NET+C# 的话,没的选,只有 Visual Studio ;如果开发 C# 的 WinForm 程序或控制台程序, IDE 可以选择 SharpDevelop 或者 MonoDevelop , SharpDevelop 的启动速度很快,几乎秒开,但 SharpDevelop 只适用 Windows ; MonoDevelop 可以跨平台,可以在 Windows 或 Linux 下使用。
1. C# 连接 Mysql
关于 C# 连接数据库方法是使用 Mysql 官方的提供的 connector-net的包,然后将其引用到项目中,这个方式可以适用与任何使用 C# 开发的程序,包括 Visual Studio 和 MonoDevelop 创建的项目。具体的操作步骤如下 :
1. 下载 connector
Mysql 的 connector -net 下载地址 : http://dev.mysql.com/downloads/connector/net/
2014 年 5 月份,最新的连接版本是 :6.8.3 ,该包中含有的文件 :
其中, Vx.0 表示的是 .NETFramework 的版本号,根据项目使用的 .NETFramework选择相应的目录下的 Mysql.**.dll 。
2. 在项目中 引用 mysql-connector-net 包中的 MySql.Data.dll (注意引用和项目使用框架相同的版本 dll )
3. 设置 数据库连接字符串
字符串的样例如下 :
Server=localhost;user id=root;password=localhost;Database=web;Port=3306;charset=utf8;
一般而言,这里需要修改的只有password和 database ,其他的都可以使用默认。
4.简单测试数据库连接的demo程序
using System; using System.Collections.Generic; using MySql.Data.MySqlClient;//引用Mysql.data.dll中的类 namespace testdb { class Program { static void Main(string[] args) { string query = "select * from t_user"; MySqlConnection myConnection = new MySqlConnection("server=localhost;user id=root;password=11;database=db_user"); MySqlCommand myCommand = new MySqlCommand(query, myConnection); myConnection.Open(); myCommand.ExecuteNonQuery(); MySqlDataReader myDataReader = myCommand.ExecuteReader(); string bookres = ""; while (myDataReader.Read() == true) { bookres += myDataReader["id"]; bookres += myDataReader["userName"]; bookres += myDataReader["password"]; } myDataReader.Close(); myConnection.Close(); Console.WriteLine(bookres); } } }
2. MySQLHelper辅助类
像上面的测试连接的样例中那样,每次都自己编写相应的连接之类的非常不方便,此时,可以考虑使用一个 DBhelper 这样的辅助类来减少重复代码。下面是一个简单的 Dbheper 辅助类:
public class MySQLHelper { private static string connectionString = ConfigurationManager.ConnectionStrings["mysqlconn"].ConnectionString; /// /// 执行查询语句,返回DataSet /// /// 查询语句 /// DataSet public static DataSet Query(string SQLString) { using (MySqlConnection connection = new MySqlConnection(connectionString)) { DataSet ds = new DataSet(); try { connection.Open(); MySqlDataAdapter command = new MySqlDataAdapter(SQLString, connection); command.Fill(ds); } catch (System.Data.SqlClient.SqlException ex) { throw new Exception(ex.Message); } finally { connection.Close(); } return ds; } } /// /// 执行SQL语句,返回影响的记录数 /// /// SQL语句 /// 影响的记录数 public static int ExecuteSql(string SQLString) { using (MySqlConnection connection = new MySqlConnection(connectionString)) { using (MySqlCommand cmd = new MySqlCommand(SQLString, connection)) { try { connection.Open(); int rows = cmd.ExecuteNonQuery(); return rows; } catch (System.Data.SqlClient.SqlException e) { connection.Close(); throw e; } finally { cmd.Dispose(); connection.Close(); } } } } /// /// 执行SQL语句,返回影响的记录数 /// /// SQL语句 /// 影响的记录数 public static int ExecuteSql(string[] arrSql) { using (MySqlConnection connection = new MySqlConnection(connectionString)) { try { connection.Open(); MySqlCommand cmdEncoding = new MySqlCommand(SET_ENCODING, connection); cmdEncoding.ExecuteNonQuery(); int rows = 0; foreach (string strN in arrSql) { using (MySqlCommand cmd = new MySqlCommand(strN, connection)) { rows += cmd.ExecuteNonQuery(); } } return rows; } catch (System.Data.SqlClient.SqlException e) { connection.Close(); throw e; } finally { connection.Close(); } } } }
备注: SQLserver 代码改写成 mysql 很容易 , 由于二者格式几乎一样,而改写的部分也很少。
后记
再次回到 Windows 修改C# 的 WinForm 程序,让我反思了一些问题,比如 Rails 到底能做到什么,桌面程序和 web 程序优缺点这类的问题 ,也算不错。不过,再次明白 windows 确实不是一个好的开发环境。
回想起来,自己当初在选择技术时,选择的是 C# ,为此花费了一年的时间来学习 C# 。后来,跟老师搞研究,转战 Java ,最后,在拥抱 ubuntu 一年后,选择了 Rails 和 Ruby 作为谋生的工具。这次,再次回到短暂的 windows 上,让我想到当初花了很长的时间学习,也应该积累了很多的经验,可惜的是都没有记下来,然后,就全忘光了。
参考文献
1. .net mysql-connector-net 连接 mysql
2. asp.net 连接 Mysql(connector/net 5.0)