*前置動作
0.1首先設定App.config
此為winform的設定,若是撰寫Asp.net 則要設定web.config<?xml version="1.0" encoding="utf-8" ?> <configuration> <connectionStrings> <add name ="mssqlserver" connectionString="Data Source=.\SQLEXPRESS; Initial Catalog=test;Integrated Security=True"/> </connectionStrings> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> </configuration>其中 name 可以設定為自己想要的名稱,如果有不同的connectionString 也可以在此新增多種,在撰寫程式碼 的時候再選擇要用哪一種connectionString 即可。Initial Catalog 是指定要存儲的資料庫,在此的資料庫名稱為test。
0.2增加一類別,名為SqlHelper
1. 使用創建連接資料庫字串 ConnectionString
private static readonly String connStr = ConfigurationManager.ConnectionStrings["mssqlserver"].ConnectionString;此時需要新增一個System.Configuration的參考才能使用 ConfigurationManager 存取到App.config。
此時因為剛才在App.config 設定的 name="mssqlserver",故可看到此時就調用"mssqlserver" 來存取剛才設定的連線字串。
2. 撰寫幾種sql 查詢後回傳種類
2.1執行insert/update/delete,回傳影響的資料列數
public static int ExecueNonQuery(string sql, CommandType cmdType, params SqlParameter[] pms) { using (SqlConnection con = new SqlConnection(connStr)) { using (SqlCommand cmd = new SqlCommand(sql, con)) { //設置目前執行的是「存儲過程? 還是帶參數的sql 語句?」 cmd.CommandType = cmdType; if (pms != null) { cmd.Parameters.AddRange(pms); } con.Open(); return cmd.ExecuteNonQuery(); } } }
2.2 回傳單一個值
public static object ExecuteScalar(string sql, CommandType cmdType, params SqlParameter[] pms) { using (SqlConnection con = new SqlConnection(connStr)) { using (SqlCommand cmd = new SqlCommand(sql, con)) { cmd.CommandType = cmdType; if (pms != null) { cmd.Parameters.AddRange(pms); } con.Open(); //MessageBox.Show("Login sussess!"); return cmd.ExecuteScalar(); } } }
2.3 回傳SqlDataReader
public static SqlDataReader ExecuteReader(string sql, CommandType cmdType, params SqlParameter[] pms) { SqlConnection con = new SqlConnection(connStr); using (SqlCommand cmd = new SqlCommand(sql, con)) { cmd.CommandType = cmdType; if(pms!=null) { cmd.Parameters.AddRange(pms); } try { con.Open(); return cmd.ExecuteReader(CommandBehavior.CloseConnection); } catch { con.Close(); con.Dispose(); throw; } } }
2.4 回傳DataTable
public static DataTable ExecuteDataTable(string sql, CommandType cmdType, params SqlParameter[] pms) { DataTable dt = new DataTable(); //use SqlDataAdapter ,it will establish Sql connection.So ,it no need to create Connection by yourself. using (SqlDataAdapter adapter = new SqlDataAdapter(sql, connStr)) { adapter.SelectCommand.CommandType = cmdType; if (pms != null) { adapter.SelectCommand.Parameters.AddRange(pms); } adapter.Fill(dt); return dt; } }
3. 調用Sqlhelper 實現比對
假設帳號及密碼都用明文儲存,則可透過以下方式連接資料庫比對
namespace UsingSqlHelper { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btn_Login_Click(object sender, EventArgs e) { //sql 查詢語句, string sql="select count(*) from users where loginId=@uid and loginPwd=@pwd"; SqlParameter[] pms = new SqlParameter[] { //設定變數,帳號去除空白字元 new SqlParameter("@uid",txtB_ID.Text.Trim()), new SqlParameter("@pwd",txtB_PWD.Text) //pwd allowed to use 'space' char }; //因為有聚合函數,回傳的是數值,故可用int轉換 int n =(int)SqlHelper.ExecuteScalar(sql, CommandType.Text, pms); if(n>0) { MessageBox.Show("Login sussess!"); } else { MessageBox.Show("Wrong username or password!"); } } } }
沒有留言:
張貼留言