首先去mysql網站下載一個mysql非安裝版本
http://dev.mysql.com/downloads/mysql/5.0.html
如果你感覺使用dos命令列不方便的話,可以順便也下載一個GUI用戶端:
http://dev.mysql.com/downloads/gui-tools/5.0.html
然後開啟vs..這個版本必須是2003以上。
然後呢,建立一個windowsApplication工程,然後在裡面的app.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="Restaurant" value="server=localhost;user id=root;password=;database=test;allow zero datetime=true;"></add>
</appSettings>
</configuration>
如果你想把連接字串寫在程式裡的話:將下面的代碼改為string strConn = “server=localhost;user id=root;password=;database=test;allow zero datetime=true;”
這裡與sqlserver連接字串相區別的是:
user->user id,
當然估計沒有下載MySql.Data.dll所以在
http://dev.mysql.com/downloads/connector/net/5.2.html下載
然後在net工程裡添加引用,找到剛才你下載MySql.Data.dll的壓縮包,解壓後,在bin目錄下有MySql.Data.dll.
添加成功後,在你的代碼裡添加一個
using MySql.Data.MySqlClient;
然後下面的和SqlClient的效果是一樣的。只不過前面多了"My"
下面看具體的代碼:
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Data;
- using MySql.Data.MySqlClient;
- namespace SqlConnect
- {
- /// <summary>
- /// author: chico chen
- /// date: 2008-11-02
- /// </summary>
- public class SqlAccess
- {
- private MySqlConnection conn = null;
- private MySqlCommand cmd = null;
- /// <summary>
- /// 建立與資料庫的串連
- /// </summary>
- /// <returns></returns>
- private MySqlConnection CreateConn()
- {
- string strConn = System.Configuration.ConfigurationSettings.AppSettings["Restaurant"].ToString();
- // SqlConnection 對象
- conn = new MySqlConnection(strConn);
- try
- {
- conn.Open();
- return conn;
- }
- catch (Exception e)
- {
- Console.WriteLine("sql 串連未開啟");
- return null;
- }
- }
- /// <summary>
- /// 關閉與資料庫的串連
- /// </summary>
- private void CloseConn()
- {
- try
- {
- conn.Close();
- }
- catch (Exception e)
- {
- Console.WriteLine("sql 串連未關閉");
- }
- }
- /// <summary>
- /// 查詢資料庫
- /// </summary>
- /// <param name="sql">類似於SELECT * FROM [User];</param>
- /// <returns></returns>
- public DataSet SelectDataSet(string sql)
- {
- CreateConn();
- MySqlDataAdapter sda = new MySqlDataAdapter(sql, conn);
- DataSet ds = new DataSet();
- sda.Fill(ds);
- CloseConn();
- return ds;
- }
- /// <summary>
- /// 執行無傳回值的sql語句,如果成功返回true,失敗返回false;
- /// </summary>
- /// <param name="sqlcmd">類似於UPDATE [USER] SET userID=@userIDC WHERE userID=@userID
- /// 或delete from [user] where userID=@userID;
- /// 或者insert into [user] (userID, password, name) values (@userID,@password,@Name) ;</param>
- /// <param name="sqlPara">
- /// SqlParameter[] sp = new SqlParameter[3];
- /// sp[0] = new SqlParameter(user, SqlDbType.VarChar, 50);
- /// sp[0].Value = "www";
- /// </param>
- /// <returns></returns>
- public bool EXESql(string sqlcmd, MySqlParameter[] sqlPara)
- {
- try
- {
- CreateConn();
- cmd = new MySqlCommand();
- cmd.Connection = conn;
- cmd.CommandType = CommandType.Text;
- cmd.CommandText = sqlcmd;
- foreach (MySqlParameter sp in sqlPara)
- {
- cmd.Parameters.Add(sp);
- }
- cmd.ExecuteNonQuery();
- CloseConn();
- return true;
- }
- catch (Exception e)
- {
- return false;
- }
- }
- }
- }
這裡調用的代碼這樣寫:
DataSet ds = sqlAccess.SelectDataSet("select * from user");
當然如果你使用DataSet還要加using System.Data;
連接字串中為什麼要加Allow Zero datetime = true是因為在添加資料庫資料時,
添加了錯誤的dateTime資料,所以mysql自動將其轉為0000-00-00 00:00:00,所以在
DataSet ds = new DataSet();
sda.Fill(ds);
這裡就會報異常,原因是不支援這種Date/Time。
要使用剛才的介面的話:
- {
- DataSet ds = sqlAccess.SelectDataSet("select * from user");
-
- Array alist = ds.Tables[0].Rows[0].ItemArray;
- foreach(object o in alist)
- {
- label1.Text += o.ToString();
- }
- UpdateName();
- }
-
- private const string sql ="UPDATE USER SET userName=@userName WHERE userID=@userID";
- private const string userName = "@userName";
- private const string userID = "@userID";
- private void UpdateName()
- {
- int i = 1;
- string name = "xxxx";
- MySqlParameter[] my =
- {
- new MySqlParameter(userName,MySqlDbType.String),
- new MySqlParameter(userID,MySqlDbType.Int32)
- };
- my[0].Value = name;
- my[1].Value = i;
- label2.Text = sqlAccess.EXESql(sql, my).ToString();
- }