2011年8月31日 星期三

C# 不使用 SqlDataSource 連接資料庫

話說在學習 ASP.NET 的時候,因為初學的關係,所以許多教材都會教導使用 sqlDataSource 這個控制項來設定連接資料庫,好處是可以不用自己去 call  C#中呼叫資料庫的方法和免去輸入SQL語法的麻煩,另一個好處是可以直接使用 ASP.NET 提供的登入控制項,繫結資料庫做到登入驗證。

但是使用登入控制項的缺點,就是會受限於 ASP.NET 的格式化限制,也就是你不能夠自由的改變登入控制項的外貌(只有幾個樣式可以選擇),這個時候如果想要自己實作登入控制項,像是 PHP 那樣使用 HTML 的 Input-Text 和 Input-Button ,就沒辦法直接使用 sqlDataSource 繫結資料庫,首先我這邊先介紹如何在 ASP.NET 中不使用 SqlDataSource 連接資料庫,以下是我上網找了些資料以後測試成功的連接方法。

1. 建立一個 WebForm (WebForm1.aspx),並在 App_Data 中建立一個 SQL Server 資料庫檔案(Datebase1.mdf)


2.接著開啟程式碼 WebForm1.aspx.cs,並加入 using System.Data.SqlClient 這個命名空間,這個是 C# 提供連接資料庫的一個命名空間,後面所實體化出來的 SQL 物件都是在這個命名空間中的類別


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;      //加入這一個命名空間

namespace WebApplication1
{
    public partial class WebForm1 : System.Web.UI.Page
    {

        protected void Page_Load(object sender, EventArgs e)
        {
    
        }

    }
}

3. 在 Page_Load 事件中加入連接的

        protected void Page_Load(object sender, EventArgs e)
        {
            const string connect = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";     // *1 設定要連接的資料庫訊息

            SqlConnection conn = new SqlConnection(connect);    
           //建立一個SQL連接物件,類似PHP: mysql_connect()

            conn.Open();       //開啟連接

            string sqlstr = "select * from Table1";     
            //SQL的語法就是在這邊寫囉!!! 類似PHP: mysql_query()

            SqlCommand cmd = new SqlCommand(sqlstr, conn);   
            //建立可以下SQL語法的物件

            SqlDataReader dr = cmd.ExecuteReader();    
          //SqlDataReader 是用來讀取下 SQL 語法之後查詢到的資料


            while (dr.Read())   //使用SqlDataReader的方法來讀取內容
             {                          //類似PHP : mysql_fetch_row(), .._arrays()
            
                Response.WriteLine("編號:" + dr["No"]);
                Response.WriteLine("姓名:" + dr["Name"]);
            }

 /*最後要記得關閉和釋放資源,不然之後還要再做不同的查詢,會出現錯誤喔!*/
            cmd.Cancel();  
            dr.Close();
            conn.Close();
            conn.Dispose();
        }


<執行偵錯>


沒有留言:

張貼留言