1. 封装方法的原则
把不变的代码写入方法中,把变化的部分通过参数传递
不变的代码: 连接数据、执行数据库操作的方法等
变化的部分: SQL语句,进行参数化查询的时候需要传递的参数
2. 实现SQLHelper类
1 // 不声明为publc的目的:这个类只在程序集当中使用,不必对外。 2 // 尽可能地对外少暴露publc类 3 class SQLHelper 4 { 5 // 连接数据库的字符串 6 private static string strConn = ConfigurationManager.ConnectionStrings[ " dbconStr " ].ConnectionString; 7 8 /// <summary> 9 /// 执行非查询sql语句,如insert、delete、update 10 /// </summary> 11 /// <param name="sqlCmd"> 要执行的sql语句 </param> 12 /// <param name="parameters"> sql语句中的参数 </param> 13 /// <returns> 执行语句后,受到影响的行数 </returns> 14 public static int ExecuteNoQuery( string sqlCmd, params SqlParameter[] parameters) 15 { 16 using (SqlConnection conn = new SqlConnection(strConn)) 17 { 18 conn.Open(); 19 using (SqlCommand cmd = conn.CreateCommand()) 20 { 21 cmd.CommandText = sqlCmd; 22 cmd.Parameters.AddRange(parameters); 23 return cmd.ExecuteNonQuery(); 24 } 25 } 26 } 27 28 /// <summary> 29 /// 一般用于返回一个数据的查询数据,如查询一个学生的数学成绩 30 /// </summary> 31 /// <param name="sqlCmd"> 要执行的sql语句 </param> 32 /// <param name="parameters"> sql语句中的参数 </param> 33 /// <returns> 查询结果,object类型 </returns> 34 public static object ExecuteScalar( string sqlCmd, params SqlParameter[] parameters) 35 { 36 using (SqlConnection conn = new SqlConnection(strConn)) 37 { 38 conn.Open(); 39 using (SqlCommand cmd = conn.CreateCommand()) 40 { 41 cmd.CommandText = sqlCmd; 42 cmd.Parameters.AddRange(parameters); 43 return cmd.ExecuteScalar(); 44 } 45 } 46 } 47 48 /// <summary> 49 /// 将查询结果以DataSet的形式返回 50 /// </summary> 51 /// <param name="sqlCmd"> 要执行的sql语句 </param> 52 /// <param name="parameters"> sql语句中的参数 </param> 53 /// <returns> 数据集合,DataSet类型 </returns> 54 public static DataSet ExecuteDataSet( string sqlCmd, params SqlCommand[] parameters) 55 { 56 using (SqlConnection conn = new SqlConnection(strConn)) 57 { 58 conn.Open(); 59 using (SqlCommand cmd = conn.CreateCommand()) 60 { 61 cmd.CommandText = sqlCmd; 62 cmd.Parameters.AddRange(parameters); 63 SqlDataAdapter adpter = new SqlDataAdapter(cmd); 64 DataSet dataset = new DataSet(); 65 adpter.Fill(dataset); 66 return dataset; 67 } 68 } 69 } 70 71 /// <summary> 72 /// 执行查询结果数据量较大的查询语句,如查询1000个学生的信息 73 /// </summary> 74 /// <param name="sqlCmd"> 要执行的sql语句 </param> 75 /// <param name="parameters"> sql语句中的参数 </param> 76 /// <returns> 一个Staff类型的List </returns> 77 public static List<Staff> ExecuteReader( string sqlCmd, params SqlParameter[] parameters) 78 { 79 using (SqlConnection conn = new SqlConnection(strConn)) 80 { 81 conn.Open(); 82 using (SqlCommand cmd = conn.CreateCommand()) 83 { 84 cmd.CommandText = sqlCmd; 85 cmd.Parameters.AddRange(parameters); 86 87 SqlDataReader reader = cmd.ExecuteReader(); 88 List<Staff> lStaff = new List<Staff> (); 89 while (reader.Read()) 90 { 91 lStaff.Add( new Staff() 92 { 93 Name = ( string )reader[ " Name " ], 94 Age = ( int )reader[ " Age " ], 95 Sex = ( bool )reader[ " Sex " ], 96 Height = ( decimal )reader[ " Height " ], 97 Salary = ( decimal )reader[ " Salary " ], 98 // 数据库中有些数据可以为空,如果使用强制转换的话,会出现错误 99 // 应该使用as来转换 100 Department = reader[ " Department " ] as string 101 }); 102 } 103 return lStaff; 104 } 105 } 106 } 107 }
3. 调用SQLHelper类
string sqlCmd = " insert into t_staff(Name,Age,Sex,Height,Salary) values(‘郑冰‘,27,1,1.64,3000) " ; SQLHelper.ExecuteNoQuery(sqlCmd);
string sqlCmd = " select Salary from t_staff where id > 2 " ; DataSet dataset = SQLHelper.ExecuteDataSet(sqlCmd); DataTable table = dataset.Tables[ 0 ]; foreach (DataRow row in table.Rows) { MessageBox.Show(row[ 0 ].ToString() + " == " + row[ " Salary " ].ToString()); }
string sqlCmd = " select Salary from t_staff where Name = @value " ; object salary = SQLHelper.ExecuteScalar(sqlCmd, new SqlParameter( " @value " , " 马金 " )); MessageBox.Show(salary.ToString());
string sqlCmd = " select * from t_staff " ; List <Staff> lStaff = SQLHelper.ExecuteReader(sqlCmd);
SQLHelper
标签:
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did160623