在Visual Studio裡有內建的SQL幫助我們存資料,SQL指的是資料庫,那麼我們就用註冊會員這個例子來看一下怎麼使用內建的SQL吧~
備註:由於Code目前沒有可以選擇C#部分,因此我先用C暫代,還有內建SQL部分,我就會選擇SQL語法
在左邊伺服器總管選擇「資料連結」按滑鼠右鍵後,選擇「加入連接」就會跳出視窗,此時就可以設定我們的資料庫檔名,並且登入伺服器用什麼方式,目前我使用的都是Windows驗證,畢竟是練習用,如果要更安全一點當然就一定要選擇SQL Server認證去設定使用者名稱和密碼部分,選好後就確定。若是新建的資料庫檔名,它就會跳出視窗說,這不存在是否要建立,此時就按「是」就對了!
建立好後,伺服器總管這邊的資料連結就會多了一個剛剛我們設定的資料庫檔名
右上方有個方案總管,這邊選取App.config,進入程式中去增加第2步的紅框,這邊就是連結資料庫的參數設定,那麼connectString後面要填什麼呢?
點選Account.mdf資料庫,再往右下角看到連接字串的部分,將這一串的值全部複製,去貼到connectString=後面,也就是再往下看下一張的圖。
選擇資料表按滑鼠右鍵,選擇加入新的資料表
它就會跳出下圖的畫面,那麼紅框是可以寫SQL資料庫的部分,綠框是顯示有哪些欄位名稱與資料型態等等相關內容,如果想要直接在綠框直接做修改也可以,寫完後就可以按下橘框的「更新」。
那麼會跳出會預覽資料庫更新的內容動作,確認後就可以按下「更新資料庫」
更新完後其實我們的左邊的資料庫看起來是沒有任何變化的,所以「須要重新整理」後就會產生剛剛所更新的內容囉!
選擇資料庫Account.mdf滑鼠右鍵選擇新增查詢,它會多出一個空白視窗,這邊就可以寫SQL語法
我們就試著寫一個建立Account的資料表的SQL語法
寫完後就點選「打勾檢查」,沒錯誤就可以點選「三角形執行」,執行完後左邊一樣要重新整理後,就會出現我們所建立的資料了
那麼無論是[法1]、[法2]的方法我們用「新增查詢」這個方法來測試「新增資料」看有沒有成功,當寫完SQL新增資料的語法後,重新整理資料庫後,選擇剛剛新增的資料表滑鼠右鍵去點選「顯示資料表資料」,可以看到剛剛新增的資料,如下圖所示有正常顯示代表有正常的在運行。
在方案總管下的參考去選擇「加入參考」
它就會跳出參考管理員視窗,那麼選擇「組件」,將「System.Configuration」這一個參考名稱打勾後,就可以「確定」了
使用Label和TextBox工具,那麼性別我們使用ComboBox它是下拉式選單,因此選擇它後右上角有個小箭頭,再點一次我們就可以去編輯項目了,也就是跳出右下角的視窗字串集合編輯器,這邊一行代表一個項目,我們就寫兩個。
設計密碼這一個部分,填寫它也是使用TextBox工具,不過由於是密碼我們希望隱藏,因此右下角屬性有個PasswordChar,這邊就是設定打密碼時會顯示什麼樣的字元,在這邊我們就輸入「*」打字出來就會顯示 * 了
那麼密碼提示問題一樣也是使用ComboBox下拉式選單。
當介面設計差不多時,我們要檢查帳號是否有人註冊過,因此除了要有檢查按鈕外,還要有訊息來顯示出檢查後的相關結果,那麼我們就在下方增加一個Label,裡面內容文字就先刪除,如下圖所示:
背景部分想要用圖片就可以在右下角屬性部分找到Background這邊去做修改,但是修改完成後,有沒有發現使用Label的文字全部都有背景暗灰色,這下怎麼辦?
點選使用Label的文字再去看屬性BackColor部分,去選擇Web的Transparent將背景變成透明色,就像下面這張圖一樣,背景色就會變透明了。
最後介面呈現的結果就如下圖所示:
(1)建立連線資料庫
(2)取得資料總筆數
(3)新增資料到資料庫的資料表
實際操作執行一下看結果有沒有存入資料庫裡,如下圖所示:
由下圖可知,剛剛執行的資料已經輸入到資料庫裡了,代表有連線成功。(第一筆資料是已經有先在資料表去做「新增搜尋」那邊有先測試過可否新增資料,那麼想測試的人也可以先做測試後,再放到VC#程式中去)
在一開始先宣告全域變數,這邊我們的變數用意是判斷是否檢查後帳號可以確定是可以使用的,最後確定註冊時會用到它。
這邊是檢查功能的程式:
(1)[紅框]先行判斷帳號是否有空白,有的話就顯示提示訊息不可空白
(2)[橘框]連線資料庫,連線字串要去看App.config,當初我們設定連結資料庫的名字是什麼(也就是name=”IntroSQLAccount”),就將它填入連線字串中
//建立連線字串,並宣告連線
string connstr = ConfigurationManager.ConnectionStrings["IntroSQLAccount"].ToString();
SqlConnection connSql = new SqlConnection(connstr);
//連接資料庫開啟
connSql.Open();
SqlCommand cmd = new SqlCommand(connstr, connSql);
(3)[綠框]使用SQL語法加入程式中做使用,這邊我們要做「搜尋」動作
//SQL搜尋語法:
//"SELECT COUNT('要搜尋的欄位名') FROM 資料表 where AccountNumber LIKE N'" + accountNumber + "'"
//轉成C#可用
cmd.CommandText = "SELECT COUNT('AccountNumber') FROM [dbo].[Table] where AccountNumber LIKE N'" + accountNumber + "'";
int AccountNum = (Int32)cmd.ExecuteScalar(); //判斷是否有相同的帳號,輸出結果是取得相同帳號的數量
(4)[藍框]判斷此帳號是否有人使用過,若>=1的狀況則已經有人使用過。
備註:btnRegister.Enabled = true; //這邊的Enabled代表此按鈕可否有作用(也就是可否做點選動作)。
這是註冊功能的程式:
(1)[紅框]先判斷帳號是否有做檢查,接著判斷是否有欄位沒有填寫到
(2)[橘框]一樣跟資料庫做連線
(3)[綠框]使用SQL語法加入程式中做使用,做的是「取得總筆數」、「新增」的動作,最後新增完後要去做執行(也就是更新資料庫)。
//取得資料總筆數
cmd.CommandText = "SELECT COUNT(*) FROM [dbo].[Table]";
account_ID = (Int32)cmd.ExecuteScalar();
//account_ID = account_ID + 1; //若第一筆資料為 1 時,就需要 + 1,若 0 則不用。
//SQL INSERT 語法-新增
// INSERT INTO [table] ([欄位名1],[欄位名2],[欄位名3],....) VALUES (@值1, @值2, @值3,...)
SqlCommand cmd1 = new SqlCommand();
cmd1.CommandType = CommandType.Text;
//cmd.CommandText = "INSERT INTO Table (編號,姓名,性別,帳號,密碼,密碼提示問題,密碼提示問題答案) VALUES (4,N'陽文文', N'男',900825,'0912345678')";
cmd1.CommandText = "INSERT INTO [dbo].[Table] (ItemID,Name,Gender,AccountNumber,Password,PasswordHitQuestion,PasswordHitAnswer) VALUES ('" + account_ID + "',N'" + tbxName.Text.Trim() + "', N'" + cbxGender.Text.Trim() + "',N'" + tbxAccountNum.Text.Trim() + "',N'" + tbxPassword.Text.Trim() + "',N'" + cbxPasswordHitQuest.Text.Trim() + "',N'" + tbxPasswordHitAns.Text.Trim() + "')";
cmd1.Connection = connSql;
cmd1.ExecuteNonQuery();//執行
(4)[藍框]註冊完後,那就回歸btnRegister.Enabled = false;,接著看狀況關閉視窗,此處有註冊完後直接做關閉動作
這邊是取消功能的程式:也就是將視窗直接關閉不做任何事。
大致上內建SQL使用狀況是這個樣子,那麼接下來就列一下常用的SQL語法
create table 表格名稱("欄位名稱1" "欄位名稱1的資料型別", "欄位名稱2" "欄位名稱2的資料型別", "欄位名稱3" "欄位名稱3的資料型別",....);
欄位還可以增加一些限制,常用的有以下幾個
NOT NULL、CHECK、UNIQUE、主鍵 (Primary Key)、外來鍵 (Foreign Key)
(1)NOT NULL:不可以空值
(2)CHECK:此欄位中所有資料都符合某個條件
(3)UNIQUE:此欄位中不會有重複的值,可接受空值
(4)主鍵 (Primary Key):此欄位中的值為「唯一值」,不可接受空值。
備註:
Primary Key可包含一個或多個欄位,當有多個欄位下,就稱為組合鍵(Composite Key)
(5)外來鍵 (Foreign Key):一個或多個欄位去指向另一資料表中的主鍵(Primary Key)。目的是確定資料的參考完整性
範例:
create table table_Test(ItemID INT NOT NULL, Name NTEXT, Score INT CHECK(SID >0) , IdentityNum INT UNIQUE,PRIMARY KEY CLUSTERED ([ItemID] ASC));
insert into 表格名稱 values (內容值1, 內容值2, 內容值3...);
上面這行寫法:內容值在每個欄位中相對應的依序填入,不可少。
insert into 表格名稱 ("欄位名稱1","欄位名稱2","欄位名稱4"...) values (內容值1, 內容值2, 內容值4...);
上面這行寫法:會對應我們所寫的欄位名稱,不一定每個欄位都填。
範例:
insert into table_Test values ('1' , N'"橙果杏"' , '80' , 'A123456');
update 表格名稱 set 欄位名稱2=內容值2, 欄位名稱3=內容值3, 欄位名稱5=內容值5 .... where 選定某欄位名稱=某內容值;
【注意!!!】
where一定要加進去喔!後面接的是特定哪幾列要去修改更新的
不然整個資料表的資料全部都會被修改掉!
範例:
update table_Test set IdentityNum = '"B654321' where ItemID="1";
(1)查詢欄位
select 欄位名稱1, 欄位名稱2 from 表格名稱;
若要顯示所有欄位的話可使用「*」來帶代表所有欄位名稱。
範例:
select Name , Score from table_Test;
(2)查詢欄位中指定的內容值
select 欄位名稱1, 欄位名稱2 from 表格名稱 where 欄位=指定的內容值;
where 後面加的是條件
範例:
select Name , Score from table_Test where Score="80";
select Name , Score from table_Test where Score < 80;
(3)搜尋並計算欄位中指定的內容值的數量
select count('欄位名稱') from 表格名稱 where 欄位名稱 like 內容值;
範例:
select count('Name') from table_Test where Name LIKE 橙果杏;
輸出結果為:1
select count('欄位名稱') As 新表格名稱 from 表格名稱;
範例:
select count(*) as 總筆數 from table_Test;
delete from 資料表名稱 where 欄位名稱 = 內容值;
【注意!!!】
where一定要加進去喔!不然整的資料全部都會被刪除!!!
範例:
delete from table_Test where Name="維娜蕾";
參考資料:
1.DAY 25 資料庫( SQL ) 建立表格 欄位介紹 - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天 (ithome.com.tw)
2.SQL DELETE FROM 刪除資料 - SQL 語法教學 Tutorial (fooish.com)