2016年8月29日 星期一

[ASP.NET C#] 透過web.config與資料庫連結

Reference:https://dotblogs.com.tw/sky5012357/2013/03/19/98161

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

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

接下來直接說明語法,而這邊也一併說明當使用的是MySQL與MSSQL時的差別,
首先是Web.config的連結與法設定,
檔案名稱:Web.config

 <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"/>
 <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"/>
</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的連結與法了。
在想要連結資料庫的地方設定增加語法,

using System.Data.SqlClient;
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["MSSQL_DBconnect"].ConnectionString);
//MySQL連結:
using MySql.Data.MySqlClient;
MySqlConnection conn = new MySqlConnection(ConfigurationManager.ConnectionStrings["MySQL_DBconnect"].ConnectionString);
其中的MySQL_DBconnect與MSSQL_DBconnect就是對應到Web.config中所新增的名稱了。
這樣就可以將ASP.NET連結至資料庫了。

接下來,以一個簡單的例子來讀取資料庫中的一筆資料,

SqlDataReader reader; //宣告一個DataReader
SqlConnection connStr = new SqlConnection(ConfigurationManager.ConnectionStrings["MSSQL_connect"].ConnectionString);
String select = "select * from USER where Name = God"; //宣告SQL語法的字串,這邊可依照自行需求修改
connStr.Open(); //開啟資料庫的連結
SqlCommand cmd = new SqlCommand(select, connStr); //宣告SqlCommand並將SQL語法及連結語法帶入
reader = cmd.ExecuteReader(); //使用SqlCommand的ExecuteReader()方法,
    //ExecuteReader()為查詢時使用,如要刪除、修改、新增,須改為ExecuteNonQuery()方法
while (reader.Read()) //使用無限迴圈將SQL語法查詢的結果每筆查閱一次
{
 String NameStr = (String)reader["Name"];//將資料庫中Name欄位存放於NameStr字串中
 int IDint = (int)reader["ID"];  //將資料庫中ID欄位存放於IDint整數中,不同型態請自行更改
     //這邊建議欄位與字串相同,方便管理,怕人搞混所以這邊用不同名稱
}
connStr.Close(); //關閉資料庫的連結


//MySQL語法:說明與上面MSSQL說明相同,但通常Sql的字眼會變成MySql
MySqlDataReader reader;
MySqlConnection connStr = new MySqlConnection(ConfigurationManager.ConnectionStrings["MySQL_connect"].ConnectionString);
String select = "select * from USER where Name = God";
connStr.Open();
MySqlCommand cmd = new MySqlCommand(select, connStr);
reader = cmd.ExecuteReader();
while (reader.Read())
{
 String Name = (String)reader["Name"];
 int IDint = (int)reader["ID"];
}
connStr.Close();
上面例子中我將字串及整數宣告在迴圈內,所以只有迴圈內可使用該字串及整數,
所以有不同需求的請自行更改。

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

沒有留言:

張貼留言