1. 程式人生 > >三層架構補充

三層架構補充

ini foreach mman all manage bll static word dbn

第一、DAL、BLL、Model必須為類庫,UI可以為控制臺、winform、asp.net等;

第二、SqlHelper放在DAL中,但ConnectionString配置在UI的config中,這是因為ConfigurationManager是讀取UI項目(入口啟動項目)的config;

第三、Executescalar(),ExecuteReader()不僅可以用來執行select查詢,還可以用來執行insert等操作;

第四、ADO.Net中想給SqlParameter的參數賦值null的話,必須傳遞Dbnull.Value;

第五、在c#代碼中寫sql語句bool類型數據必須寫1或0;

案例:

技術分享圖片
 1 using SanCeng.Model;
 2 using System;
 3 using System.Collections.Generic;
 4 using System.Data;
 5 using System.Data.SqlClient;
 6 using System.Linq;
 7 using System.Text;
 8 using System.Threading.Tasks;
 9 
10 namespace SanCeng.DAL
11 {
12     public class UserDAL
13     {
14         /// <summary>
15 /// 新增 16 /// </summary> 17 /// <param name="userName"></param> 18 /// <param name="password"></param> 19 /// <param name="phoneNum"></param> 20 /// <param name="age"></param> 21 /// <returns></returns>
22 public long Add(string userName, string password, string phoneNum, int? age) 23 { 24 object obj = SqlHelper.ExecuteScalar("insert into T_Users(UserName,Password,PhoneNum,Age,IsDeleted) output inserted.id values(@UserName,@Password,@PhoneNum,@Age,0)", new SqlParameter("@UserName", userName), new SqlParameter("@Password", password), new SqlParameter("@PhoneNum", phoneNum),new SqlParameter("@Age",age==null?(object)DBNull.Value:age)); 25 return Convert.ToInt64(obj); 26 } 27 28 /// <summary> 29 /// 軟刪除id為主鍵的數據 30 /// </summary> 31 /// <param name="id"></param> 32 public void Delete(long id) 33 { 34 SqlHelper.ExecuteNonQuery("Update T_Users set IsDeleted=1 where id=@Id", new SqlParameter("@Id", id)); 35 } 36 private User ToUser(DataRow row) 37 { 38 User user = new User(); 39 user.Id = (long)row["Id"]; 40 user.Age = row.IsNull("Age") ? null : (int?)row["Age"]; 41 user.Password = (string)row["Password"]; 42 user.IsDeleted = (bool)row["IsDeleted"]; 43 user.phoneNum = (string)row["UserName"]; 44 user.UserName = (string)row["UserName"]; 45 return user; 46 } 47 48 public void Update(User user) 49 { 50 SqlHelper.ExecuteNonQuery("Update T_Users set UserName=@UserName,Password=@Password,PhoneNum=@PhoneNum,Age=@Age where Id=@Id", new SqlParameter("@UserName", user.UserName), new SqlParameter("@Password", user.Password), new SqlParameter("@PhoneNum", user.phoneNum), new SqlParameter("@Age", user.Age == null ? (object)DBNull.Value : user.Age), new SqlParameter("@Id", user.Id)); 51 } 52 public User GetById(long id) 53 { 54 DataTable table = SqlHelper.ExecuteQuery("select * from T_Users where Id=@Id", new SqlParameter("@Id", id)); 55 if(table.Rows.Count<=0) 56 { 57 return null; 58 } 59 else if(table.Rows.Count>1) 60 { 61 throw new ApplicationException("找到多條id="+id+"的數據"); 62 } 63 else 64 { 65 DataRow row = table.Rows[0]; 66 return ToUser(row); 67 } 68 } 69 /// <summary> 70 /// 返回所有未軟刪除的數據 71 /// </summary> 72 /// <returns></returns> 73 public IEnumerable<User> GetAll() 74 { 75 DataTable dt = SqlHelper.ExecuteQuery("select * fom T_User where IsDeleted = 0"); 76 List<User> list = new List<User>(); 77 foreach(DataRow row in dt.Rows) 78 { 79 list.Add(ToUser(row)); 80 } 81 return list; 82 } 83 } 84 85 86 87 }
UserDAL

技術分享圖片
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Configuration;
 4 using System.Data;
 5 using System.Data.SqlClient;
 6 using System.Linq;
 7 using System.Text;
 8 using System.Threading.Tasks;
 9 
10 namespace SanCeng.DAL
11 {
12     class SqlHelper
13     {
14         private static string connStr = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
15         public static  void ExecuteNonQuery(string sql, params SqlParameter[] parameters)
16         {
17             using (SqlConnection conn = new SqlConnection(connStr))
18             using (SqlCommand cmd = conn.CreateCommand())
19             {
20                 conn.Open();
21                 cmd.CommandText = sql;
22                 cmd.Parameters.AddRange(parameters);
23                 cmd.ExecuteNonQuery();
24             }
25         }
26         public static  object ExecuteScalar(string sql, params SqlParameter[] parameters)
27         {
28             using (SqlConnection conn = new SqlConnection(connStr))
29             using (SqlCommand cmd = conn.CreateCommand())
30             {
31                 conn.Open();
32                 cmd.CommandText = sql;
33                 cmd.Parameters.AddRange(parameters);
34                 return cmd.ExecuteScalar();
35             }
36         }
37         public static DataTable ExecuteQuery(string sql, params SqlParameter[] parameters)
38         {
39             DataTable table = new DataTable();
40             using (SqlConnection conn = new SqlConnection(connStr))
41             using (SqlCommand cmd = conn.CreateCommand())
42             {
43                 conn.Open();
44                 cmd.CommandText = sql;
45                 cmd.Parameters.AddRange(parameters);
46                 using (SqlDataReader reader = cmd.ExecuteReader())
47                 {
48                     table.Load(reader);
49                     return table;
50                 }
51             }
52         }
53     }
54 }
SqlHelper 技術分享圖片
 1 using SanCeng.DAL;
 2 using SanCeng.Model;
 3 using System;
 4 using System.Collections.Generic;
 5 using System.Linq;
 6 using System.Text;
 7 using System.Threading.Tasks;
 8 
 9 namespace SanCeng.BLL
10 {
11     public class UserBLL
12     {
13         private UserDAL uDAL = new UserDAL();
14         public long Add(string userName,string password,string phoneNum,int? age)
15         {
16             return uDAL.Add(userName, password, phoneNum, age);
17         }
18         public void Delete(long id)
19         {
20             uDAL.Delete(id);
21         }
22         public void Update(User user)
23         {
24             uDAL.Update(user);
25         }
26         public User GetById(long id)
27         {
28             return uDAL.GetById(id);
29         }
30         public IEnumerable<User> GetAll()
31         {
32             return uDAL.GetAll();
33         }
34     }
35 }
暫時的廢物userBLL 技術分享圖片
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace SanCeng.Model
 8 {
 9     public class User
10     {
11         public long Id { get; set; }
12         public int? Age { get; set; }
13         public string phoneNum { get; set; }
14         public string Password { get; set; }
15         public bool IsDeleted { get; set; }
16         public string UserName { get; set; }
17     }
18 }
Model 技術分享圖片
 1 using SanCeng.BLL;
 2 using System;
 3 using System.Collections.Generic;
 4 using System.ComponentModel;
 5 using System.Data;
 6 using System.Drawing;
 7 using System.Linq;
 8 using System.Text;
 9 using System.Threading.Tasks;
10 using System.Windows.Forms;
11 
12 namespace SanCeng.WinForm
13 {
14     public partial class Form1 : Form
15     {
16         public Form1()
17         {
18             InitializeComponent();
19         }
20 
21         private void button1_Click(object sender, EventArgs e)
22         {
23             UserBLL bll = new UserBLL();
24             
25             bll.Delete(1);
26         }
27     }
28 }
UI

三層架構補充