Thursday, January 6, 2011

[C#] C# 連接MySQL Insert範例

日前要測一個東西,但是找不到免費的MSSQL可以用,所以就去db4free申請了個免費的mysql來用,相當方便又可以從外部連結,於是有了下面的C#連結MySQL的範例出現。

記得在.Net上要連結MySQL需要去抓這個MySQL Connector,如果不需要自己編DLL的話,不用抓 src 的版本,只要抓 mysql-connector-net-VER.zip 這個來安裝就好,另外,如果發布時需要找DLL檔的話,在 \MySQL Connector Net VER\Assemblies\下面有兩個資料夾,使用.NET Framework 2.0~3.5的找\v2.0\這個裡的DLL,用.NET Framework 4.0的找\v4.0\下面的。

下面就是簡單的Insert範例啦。

//記得要載入MySQL
using MySql.Data;
using MySql.Data.MySqlClient;

//程式片段大概是這樣
public int Insert (string id,string total,string sig)
{
    //設定連線資訊
    string connStr = String.Format("server=DBHOST;user id=USER; password=PWD; database=DBNAME");

    MySqlConnection conn = new MySqlConnection(connStr);
    //sql字串
    string sqlStr = "INSERT INTO tbl_SRBack (id,total,sig) VALUES (?id,?total,?sig)";

    try
    {
        conn.Open();
    }
    catch (MySql.Data.MySqlClient.MySqlException ex)
    {
        switch (ex.Number)
        {
            case 0:
            Console.WriteLine("Can't Connect to DBHOST.");
                break;
            case 1045:
            Console.WriteLine("Account or Password wrong.");
                break;
        }
    return ex.Number;
    }

    MySqlCommand mySqlCmd = new MySqlCommand(sqlStr, conn);
    //加入參數
    MySqlParameter[] parameters = new MySqlParameter[3];

    parameters[0] = new MySqlParameter("?id", MySqlDbType.VarChar, 99);
    parameters[0].Value = id;

    parameters[1] = new MySqlParameter("?total", MySqlDbType.Int32);
    parameters[1].Value = Convert.ToInt32(total);

    parameters[2] = new MySqlParameter("?sig", MySqlDbType.VarChar, 99);
    parameters[2].Value = sig;

    mySqlCmd.Parameters.AddRange(parameters);

    try
    {
        mySqlCmd.ExecuteNonQuery();
        return 0;
    }
    catch (MySql.Data.MySqlClient.MySqlException ex)
    {
        return ex.Number;
    }
}


__2011/12/20 update__
因為有網友問到,所以來更新一下,這個MySQL Connector後來有更新了,下載時請選".NET & Mono",依你的.NET版本去看要引用哪個資料夾內的檔案,若需要呼叫MySqlCommand請引用mysql.data.dll這檔案,然後using MySql.Data.MySqlClient;,這樣應該就可以了。

我沒實際寫到會動,不過看起來呼叫是沒問題的。
sqlsample

8 comments:

  1. 忘記說,最後因為我放aspx的站brinkster不能吃dll,試了老半天後做了白工,所以只好把這個範例貼出來免得花了一堆時間啥結果都沒有...

    ReplyDelete
  2. 請問一下 我跑上面的程式
    為什麼編譯時跟我說mySqlCmd不存在
    可是已經有引入MySql.Data和MySql.Data.MySqlClient
    卡在insert功能好久了...

    ReplyDelete
  3. 你在vs中MySqlCommand有變色嗎 ?

    ReplyDelete
  4. 沒有變色
    不知道該怎麼辦

    ReplyDelete
  5. 也許他有改了版本或是怎樣,我再找時間試一下。

    ReplyDelete
  6. 恩 那你自己跑這支程式還可以動嗎?
    我目前在看msdn的網站(好多...不太清楚重點在哪 只能慢慢看 短時間內似乎沒法搞定...)
    謝謝你喔

    ReplyDelete
  7. to jessie123:
    我剛剛試了一下,有更新在文章最後,你可以參考看看。

    ReplyDelete
  8. 謝謝你
    我可以insert資料了
    我引入mysql.data.dll
    把參數改一改,還有把第51和55行註解掉就可以跑了

    ReplyDelete