2014年1月17日 星期五

C# : 使用 DataSet 管理從 MySQL 查詢出來的資料

此文引用自:http://godstamps.blogspot.tw/2012/02/c-dataset-mysql.html

在【C# : 對 MySQL 查詢資料】一文中查詢多筆資料所使用到的 MySqlDataReader 會與資料庫建立持續性的連線,所以在查詢完資料後必須明確的 Close();有時候我們會使用多句不同的查詢語句查詢出資料並長時間交互使用資料內容,而且這些資料並不會馬上被更新或是不需要更新,那麼每次都重新查詢或是使這些 MySqlDataReader 都一直維持連線,好像怎麼樣都不是很理想,這時候我們就可以考慮使用 DataSet 建立資料塊。
首先,利用 MySqlDataAdapter 來查詢資料並為查出的資料定義一個名稱整塊填入 DataSet 中做為 DataTable,之後可以利用所定義的名稱從 DataSet 取出 DataTable 並在 DataTable 指定列及欄位取得所需要的資料;而且也可為 DataTable 新增、修改、刪除資料,最終再整理 MySQL 語句將結果更新回資料庫中,如此將可對資料庫避免一些不必要讀寫的次數。大致的用法如下...

//開啟連線
MySqlConnection conn = new MySqlConnection("server=127.0.0.1;user=root;database=test;port=3306;password=1111;");
conn.Open();

//建立 DataSet
DataSet dataSet = new DataSet();

//使用 MySqlDataAdapter 查詢資料,並將結果存回 DataSet 當做名為 test1 的 DataTable
string sql = "SELECT * FROM test_table1 WHERE 1";
MySqlDataAdapter dataAdapter1 = new MySqlDataAdapter(sql, conn);
dataAdapter1.Fill(dataSet, "test1");

//使用 MySqlDataAdapter 查詢資料,並將結果存回 DataSet 當做名為 test2 的 DataTable
dataAdapter2 = new MySqlDataAdapter("SELECT * FROM test_table2 WHERE 1", conn);
dataAdapter2.Fill(dataSet, "test2");

// test1 的 DataTable
DataTable dataTable = dataSet.Tables["test1"];

//列出 test1 的第 4 筆資料
Console.WriteLine("id={0} , name={1}", dataTable.Rows[3]["id"], DataTable.Rows[3]["name"]);

//列出 test1 的總筆數
Console.WriteLine("總筆數:{0}", dataTable.Rows.Count);

//逐筆列出 test1 的資料
foreach(DataRow row in dataTable.Rows){
    Console.WriteLine("id={0},name={1}", row["id"], row["name"]);
}

//建立新一列的資料
DataRow newRow = dataTable.NewRow();
newRow["id"] = 999;
newRow["name"] = "testName999";

//在 test1 中新增一筆資料
dataTable.Rows.Add(newRow);

//刪除 test1 中的 第 4 筆資料
dataTable.Rows[3].Delete();

//修改 test1 中第 1 筆資料的 name 欄位內容
dataTable.Rows[0]["name"] = "newName";

//利用 MySqlCommandBuilder 使 dataAdapter1 能夠實行新增、修改、刪除
new MySqlCommandBuilder(dataAdapter1);

//將 test1 內容的變動更新回資料庫
dataAdapter1.Update(dataSet, "test1");

一個 DataSet 可以存放多個 DataTable,而每個 DataTable 資料的變更可以透過 MySqlDataAdapter 連接更新回資料庫,這樣可以很方便的管理多批資料,不過要特別注意的是複雜語句查出的資料可能會無法正確處理,如 JOIN、GROUP BY ... 等。

以上範例可以簡單的應用在 Windows Form 應用程式的 DataGridView ...

假設有的 DataGridView 實作為 dataGridView1,延續上面範例的 DataSet ...

//指定資料來源
dataGridView1.DataSource = dataSet;

//指定列出 test1 DataTable 內容
dataGridView1.DataMember = "test1";

這樣在顯示視窗的 DataGridView 內容就會依照 test1 DataTable 資料欄位將內容資料以列表的方式顯示出來,可以直接在列表中新增、修改、刪除資料,不過如果想將變更的內容更新回資料庫,可能就要再加一個按鈕,使它在點擊之後執行以下這兩句,才會更新,否則只是表單上表面看到的變動而已,資料庫並不會有任何更改。

new MySqlCommandBuilder(dataAdapter1);
dataAdapter1.Update(dataSet, "test1");

2013年11月20日 星期三

MySql 啟動與關閉

MySql 是壓縮檔,下述會提供兩個 .Bat 檔

Start.bat
start   /B  C:\mysql\bin\mysqld --defaults-file=d:\app\mysql\my.ini

stop.bat
C:\mysql\bin\mysqladmin -u root shutdown

參考網站:

1. http://bbs.chinaunix.net/thread-1440020-1-1.html
2. http://forum.slime.com.tw/thread222048.html

外部連結 MySql 資料庫

要在外部連接 MySql 資料庫,必須額外設定才可以連線。

第一步:先設定權限表

開啟終端機
# mysql -u 帳號 -p
# password: 密碼
mysql > GRANT ALL PRIVILEGES ON DbName.* TO UserName@IP IDENTIFIED BY 'PassWord' WITH GRANT OPTION;
mysql > FLUSH PRIVILEGES;

解釋:

1. dbName → 要開放的資料庫名稱
2. UserName → 遠端登入的帳號
3. IP → 開放連線的 IP,使用%的話,可以讓所有的電腦都可以連線
4. PassWord → 遠端登入的密碼


第二步:設定防火牆,打開埠號【3306】。



參考網站:

2013年11月17日 星期日

安裝JDK

安裝JDK,在終端機中輸入下列指令:

$sudo add-apt-repository ppa:webupd8team/java
$sudo apt-get update
$sudo apt-get install oracle-java7-installer

查看是否安裝成功:

$java -version

參考網址:

http://apexu.com/apexu/tw/modules/publisher/item.php?itemid=35

另一個安裝方法:

http://www.dotblogs.com.tw/jhsiao/archive/2013/09/03/116186.aspx

顯示硬體資訊

在終端機下這個指令:

$lspci -n

將顯示出的結果複製並貼在這個網站上面,會顯示出目前系統的硬體資訊。

http://kmuto.jp/debian/hcl/


2013年11月15日 星期五

Ubuntu 13.10上安裝 Wine 1.73

在 Ubuntu 13.10上安裝 Wine 1.73,以下為安裝步驟:

$ sudo add-apt-repository ppa:ubuntu-wine/ppa
$ sudo apt-get update
$ sudo apt-get install wine1.7
$ sudo apt-get install winetricks

執行後即可以安裝 Window 應用程式

此文參考:

http://www.tecmint.com/install-wine-on-ubuntu-and-linux-mint/

2013年11月13日 星期三

開啟管理者權限的指令

首先先進入終端機,然後一一輸入下列指令

指令01:sudo su
指令02:sudo nautilus

隨後系統會自動開立管理者使用的視窗。