顯示具有 MySQL 標籤的文章。 顯示所有文章
顯示具有 MySQL 標籤的文章。 顯示所有文章

2009/08/13

DB裡面

Database裡面應該會這樣放
覺得可以再更改的地方再提出吧!


ID_Transformation
Tag_IDDatabase_IDChanged
1212343456567878980000010
1212343456567899980000021
1212343456567800980000032
1212343456567812980000043
//Tag_ID 代表 Tag的ID
//Database_ID 代表Database上的ID
//changed 代表 Tag_ID更改次數,也可以代表Tag遺失次數!XD



Key(Key的儲存)
Database_ID Public_Key
98000001 qwerasdfzxcvtgbh
98000002 qasdfghjklmnbvcx
98000003 qasdfghjklmnbaaa
98000004 qasdfghjklmasdfg
// Public_Key 儲存 public key,認證用!



Paper(記錄公文的資訊)
Database_ID Paper_Read
98000001 y
98000002 n
98000003 n
98000004 y
// Paper_Read 代表 公文已讀與否!


Identity(user身分)
Database_ID NameLevelUser_ID
98000001 Jimmy Chairman A123456789
98000002 RobertCamel Manager B123456789
98000003 Scribe Manager C123456789
98000004 Soultaker Chairman D123456789
// Level 代表 職位
// User_ID 代表 身分證字號



ENV_Set(用來儲存user的設定值)
Database_ID Set_1Set_2Set_3
98000001 0 1 1
98000002 1 1 1
98000003 0 1 0
98000004 1 0 1
// set_1 代表 user環境的設定 0:off 1:on (例如button要不要透明化!?)

2009/07/02

MySQL Prepare() 使用法 + UTF-8 亂碼解決

MySqlCommand 提供的 Prepare() 可以讓你避免自行組合字串的不便性和 SQL Injection 的防止。前面提到過 21.2.4.6 節有範例可以參考。

MySqlConnection conn = new MySqlConnection("server=localhost;user=root;database=test;port=3306;charset=utf8;");
MySqlCommand cmd = new MySqlCommand("INSERT INTO test VALUES (@ID, @Name)", conn);
cmd.Prepare();
cmd.Parameters.Add("@ID", MySqlDbType.Int16);
cmd.Parameters.Add("@Name", MySqlDbType.String);

for(int i = 6; i < 10; i++){
cmd.Parameters["@ID"].Value = i;
cmd.Parameters["@Name"].Value = "修羅パンツ" + i.ToString();
cmd.ExecuteNonQuery();
}


只要下好 SQL Command 後呼叫 Prepare(),再塞入 Parameters,最後 Execute 就可以完成了。這邊範例是先定義好 Parameters 的型態 (ID 是整數、Name 是字串)後,利用迴圈批次新增資料 (Parameters["@ID"].Value) 再呼叫 ExecuteNonQuery 新增,就可以達成重複使用。

另外,如果在 Connection String 時沒有設定 charset=utf8 (注意是 utf8 不是 utf-8!),寫入時會預設使用 iso-8859-1 (Latin1) 來寫入,非英數字就會變成 ???。另外新增 MySQL 資料表時,Table 跟每個欄位也要設定使用 utf8 (utf8_general_ci) 這樣讀寫才會正常。

總結,要排除亂碼,在 MySQL 資料表要設定為 utf8 外,程式建立連線時也要明顯定義 charset=utf8 才可以。

MySQL Connector/Net 使用法

1. 安裝 MySQL Connector/Net (參考文章)
2. 開啟 Visual C# 2008,將 MySql.Data 加入物件瀏覽器的自訂元件集(編輯自訂元件集),在.NET分頁可以找到 MySql.Data。



3. 在專案要先「參考」MySql.Data才能在專案中使用,快速新增參考的方式很簡單,在 2. 項中我們已經新增了 MySql.Data,只要選取後按下圖中的按鈕就可以快速加入參考。



4. 以下是連接 MySQL 資料庫的範例程式碼:

using System;
using System.Windows.Forms;
using MySql.Data.MySqlClient;


namespace WindowsFormsApplication1 {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e) {
MySqlConnection conn = new MySqlConnection("server=localhost;user=root;database=test;port=3306;charset=utf8;");
try {
conn.Open();
MySqlCommand cmd = new MySqlCommand("SELECT * FROM test", conn);
MySqlDataReader rdr = cmd.ExecuteReader();

while(rdr.Read()) {
this.label1.Text += rdr[0] + " -- " + rdr[1] + "\n";
}

rdr.Close();
conn.Close();
} catch(Exception ex) {
MessageBox.Show(ex.ToString());
}
}
}
}


Form1 有個 Label 叫做 label1,作為顯示資料庫的項目用。

2009/07/01

C# 連接 MySQL 資料庫

我們寫的系統預定會連接後端資料庫,是故一定要知道怎麼用程式連接。因為我們選的是 .NET 平台,又因為 .NET 特性,只要函式庫支援 .NET,所有 .NET 語言都可以使用它。所以說 RFID 廠商提供的 .NET 函式庫我們可以在 VB.NET, VC#, VC++ 等語言使用。同樣的,MySQL官方網站有給 .NET 平台的 Connector 可以用:下載網址

沒解讀錯誤的話,這個套件使用 GPL 授權,這意味著使用的程式也要以 GPL 授權嗎?這值得玩味。

另外這個 Connector 有 Manual:點此開啟,連結的是 MySQL 5.1 版的文件,但應該相去不遠。


21.2.4 節
才開始教你如何建立 MySQL 連線並取得資料,這是寫程式時會用到的部分。

為了防止自行組合 SQL 字串而給駭客有 SQL Injection 隱碼攻擊的機會,很多函式庫會提供 PreparedStatement 等類似的方式來幫助程式設計師來組合字串。MySQL Connector/Net 也不例外,21.2.4.6 節有提到使用 Prepare() 方法。

其他等遇到再說。