2013年12月19日 星期四

[ASP.NET C#] ASP.NET C#與資料庫連結


通常在寫網頁時,都會需要與資料庫連結,並且從中取出資料或查詢比對等,
接下來是說明ASP.NET該如何與資料庫進行連結。

首先,與資料庫連結,就最先想到必須要跟網頁說明與哪個資料庫連結,
並且資料庫使用者的帳號、密碼、位置等資訊必須說明,
通常在設定資料庫連結時大多網站都會介紹如何從xxxxx.aspx.cs的網頁中去連結,
但是由於自己在開發時常常遇到一件事情,就是資料庫的使用者名稱、密碼會更改,
雖然說一般而言不太可能會去更改...但有時網頁並非自己開發時,就會常發生,
而如果是在xxxxx.aspx.cs中建立資料庫連結時,會因為必須連結的頁面很多,
因此常常導致一改就要改很多頁面的窘境,因此我建議在Web.config中建立資料庫連結語法,
這樣的好處是,如果需要修改使用者帳號、密碼,甚至資料庫名稱時只需要修改一次,
另外當有開發到較大的網站時,通常使用者權限會因頁面權限的不同而有所不同,
而此種方法還可以在同一個地方管理所有連結語法。

接下來直接說明語法,而這邊也一併說明當使用的是MySQL與MSSQL時的差別,
首先是Web.config的連結與法設定,
檔案名稱:Web.config
1<connectionStrings>
2    <add name="MSSQL_DBconnect" connectionString="Data Source = 127.0.0.1 ;Initial Catalog =DB_Name;User ID =DB_Username;Password = DB_Password" providerName="System.Data.SqlClient"/>
3    <add name="MySQL_DBconnect" connectionString="server=127.0.0.1;User Id=DB_Name;password=DB_Password;Persist Security Info=True;database=DB_Name;CHARSET=big5" providerName="MySql.Data.MySqlClient"/>
4</connectionStrings>
以上的name欄位中分別有MSSQL_DBconnect及MySQL_DBconnect兩個名稱,
分別就是說明MSSQL及MySQL連結的語法,另外使用MySQL時必須自行匯入MySQL的dll檔
另外,語法中的127.0.0.1請修改為資料庫位置(正常初學者資料庫及開發環境相同),
DB_Username、DB_Password、DB_Name請依照自己的設定做更正。

接下來,就是說明該如何在xxxxx.aspx.cs套用Web.config的連結與法了。
在想要連結資料庫的地方設定增加語法,
1//MSSQL連結:
2using System.Data.SqlClient;
3SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["MSSQL_DBconnect"].ConnectionString);
4//MySQL連結:
5using MySql.Data.MySqlClient;
6MySqlConnection conn = new MySqlConnection(ConfigurationManager.ConnectionStrings["MySQL_DBconnect"].ConnectionString);
其中的MySQL_DBconnect與MSSQL_DBconnect就是對應到Web.config中所新增的名稱了。
這樣就可以將ASP.NET連結至資料庫了。

接下來,以一個簡單的例子來讀取資料庫中的一筆資料,
01//MSSQL語法:
02SqlDataReader reader;   //宣告一個DataReader
03SqlConnection connStr = new SqlConnection(ConfigurationManager.ConnectionStrings["MSSQL_connect"].ConnectionString);
04String select = "select * from USER where Name = God";  //宣告SQL語法的字串,這邊可依照自行需求修改
05connStr.Open(); //開啟資料庫的連結
06SqlCommand cmd = new SqlCommand(select, connStr);   //宣告SqlCommand並將SQL語法及連結語法帶入
07reader = cmd.ExecuteReader();   //使用SqlCommand的ExecuteReader()方法,
08                //ExecuteReader()為查詢時使用,如要刪除、修改、新增,須改為ExecuteNonQuery()方法
09while (reader.Read())   //使用無限迴圈將SQL語法查詢的結果每筆查閱一次
10{
11    String NameStr = (String)reader["Name"];//將資料庫中Name欄位存放於NameStr字串中
12    int IDint = (int)reader["ID"];      //將資料庫中ID欄位存放於IDint整數中,不同型態請自行更改
13                    //這邊建議欄位與字串相同,方便管理,怕人搞混所以這邊用不同名稱
14}
15connStr.Close();    //關閉資料庫的連結
16 
17 
18//MySQL語法:說明與上面MSSQL說明相同,但通常Sql的字眼會變成MySql
19MySqlDataReader reader;
20MySqlConnection connStr = new MySqlConnection(ConfigurationManager.ConnectionStrings["MySQL_connect"].ConnectionString);
21String select = "select * from USER where Name = God";
22connStr.Open();
23MySqlCommand cmd = new MySqlCommand(select, connStr);
24reader = cmd.ExecuteReader();
25while (reader.Read())
26{
27    String Name = (String)reader["Name"];
28    int IDint = (int)reader["ID"];
29}
30connStr.Close();
上面例子中我將字串及整數宣告在迴圈內,所以只有迴圈內可使用該字串及整數,
所以有不同需求的請自行更改。

由於例子中SQL語法已針對特定Name篩選,如果有不同的需求,建議可以在迴圈內用if判斷篩選

沒有留言:

張貼留言