op.18 善用自己的工具紀錄
更方便地紀錄我們彼此之間的點滴
就會需要更好用的工具!
今天是連假大魔王的第3天,我決定繼續跟專題死喀到底XD
昨天已經把資料庫都搞定了,那今天就是要來用我們熟悉的 C# 來操控啦,今天會教一些比較實用的幾個功能,就先往下看啦。
先是與資料庫連接的部分,需要先 Nuget 套件,需要 MySql.Data ,所以一樣需要先 using 相關的檔案進來。
using Mysql.Data.MysqlClient;
連接資料庫其實很簡單,首先需要 建立連線 > 執行指令 > 關閉連線,這三大步驟。
建立連線的部分,需要宣告一個 MySqlConnection 的物件,裡面存放著相關連線資訊 (如:主機位置、使用者帳號等),所以需要先宣告 MySqlConnection 的物件。
MySqlConnection conn = new MySqlConnection();
我們新增一個視窗程式專案,並且新增一個按鈕在表單上,我們來寫一個測試連線的按鈕。
點兩下新增一個 Click事件
conn.ConnectionString = ConnectionString;
try
{
conn.Open();
if (conn.State == ConnectionState.Open)
{
MessageBox.Show("連線成功","成功");
conn.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message,"失敗");
}
上段程式碼主要是當按下按鈕時,先將連線的字串對應設定,然後進入 Try... Catch...段,使用 Try Catch主要是防止在連接資料庫時發生錯誤,導致程式被迫中止,連線過程總是會有許多的未知錯誤,比如最基本資料庫還沒運行、帳號密碼錯誤等,所以使用 Try Catch 防止出錯。
當成功連接時,這裡用了一個 if (conn.State == ConnectionState.Open) 確認連線狀態,當確認已經開啟時,就使用 Messagebox 來提示使用者。
當不成功連接時,則將捕捉到錯誤的資訊用 Messagebox 來提示使用者。
連接成功
連接失敗(找不到主機或是沒開)
連接失敗(使用者帳號或密碼錯誤)
這樣就完成與 Mysql的連線了,今天就到此結束吧(OS:太少了吧!欠打。
好的,繼續提供給大家我的一些小祕方。
需要事先拉出 CheckedListBox,並且給與一個按鈕。
conn.ConnectionString = ConnectionString;
try
{
conn.Open();
if (conn.State == ConnectionState.Open)
{
checkedListBox1.Items.Clear();
try
{
var commandStr = "SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='DATABASE'";
var sqlCommand = new MySql.Data.MySqlClient.MySqlCommand(commandStr, conn);
var dr = sqlCommand.ExecuteReader();
while (dr.Read())
{
checkedListBox1.Items.Add(dr["TABLE_NAME"], false);
}
}
catch (Exception ex)
{
MessageBox.Show("讀取資料失敗 原因為 " + ex.Message, "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message, "失敗");
}
執行結果:
今天先到這裡偷懶個,日後再補上其他延伸的功能。
這裡示範用迴圈快速新增10筆資料,其實主要也是透過 sql 語法來進行資料的新增,只是我們把需要打sql指令的地方,用程式幫我們執行,這裡有用到 c# 的 DateTime 來取得現在時間。
conn.ConnectionString = ConnectionString;
try
{
conn.Open();
if (conn.State == ConnectionState.Open)
{
for(int i=0; i < 10; i++)
{
DateTime date = DateTime.Now;
var commandStr = "INSERT INTO `test01`.`data` (`ID`, `Time`, `Temperature`, `Humidity`) VALUES ('" +
i.ToString() + "', '" +
date.ToString("yyyy-MM-dd HH:mm:ss") + "', '35.2', '24.3');";
var sqlCommand = new MySql.Data.MySqlClient.MySqlCommand(commandStr, conn);
var dr = sqlCommand.ExecuteNonQuery();
}
MessageBox.Show("Ok", "完成");
conn.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "失敗");
}
其實這整段的精華在於 var dr = sqlCommand.ExecuteNonQuery(); 透過使用 ExecuteNonQuery() 來執行指令,雖然沒有回傳值,但是操作依然會正常操作。
實際結果:
簡單地說,通通清掉啦XD
conn.ConnectionString = ConnectionString;
try
{
conn.Open();
if (conn.State == ConnectionState.Open)
{
var commandStr = "truncate table `test01`.`data`";
var sqlCommand = new MySql.Data.MySqlClient.MySqlCommand(commandStr, conn);
var dr = sqlCommand.ExecuteNonQuery();
MessageBox.Show("Ok", "完成");
conn.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "失敗");
}
實際結果:
其實最後是跟 SQL 語法相關,而 C# 其實只是幫助執行的部分,所以以上的內容當然也可以轉換語言為 C or Python 等你熟悉的語言,那這裡就是用 C# 來跟大家粗略的介紹,至於功能如何開發,則是依照自己的需求下去配給不同的元件或程式碼。
其實裝了 phpMyAdmin 後,很多的 SQL 語法我都是用 phpMyAdmin 生成的,進階的功能才再研究,這裡示範新增資料表的過程所產生的語法。
先以正常的圖形化介面方式新增資料表
然後可以在右下角預覽SQL
就可以複製出來了解這段 SQL 在幹嘛啦~
CREATE TABLE `test`.`test02` ( `ID` INT NOT NULL , `Text` TEXT NOT NULL , `Date` DATETIME NOT NULL , `num` INT NOT NULL ) ENGINE = MyISAM;
上面就寫明的 CREATE TABLE (創建表格),在 test的資料庫中建置一個 test02表格,欄位分別是 'ID' (INT型態)、'Text' (TEXT型態)、'Date' (DATETIME型態)、'num' (INT型態),使用的引擎是 MyISAM,透過這樣的方式,可以減輕對 SQL 學習的負擔,畢竟太多東西要學了,沒辦法樣樣專精,可以這樣偷懶個XD
好啦今天就到這裡啦!祝各位明天一樣有烤肉吃
「現在的時間是凌晨兩點鐘,收音機正播放著時下流行的抒情歌曲...
寧靜的夜裡,只有那照片裡的人,還對我親切地微笑著...」
這首是我大一時很喜歡的曲子,是我當初練二胡的目標;後來也確實的練了起來,雖然還沒有到達那種意境XD;到了大三,開始以寫出這樣的曲子為目標XD,很佩服一位活躍於影像科學的教授,一樣可以用音符寫日記,希望自己有天也能到此境界。
笑死...發出去才發現沒有打標題XD