1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Configuration; 6 using System.Data.SqlClient; 7 using System.Data;//using: 引入命名空間 8 9 namespace DBHelper 10 { 11 public static class DBHelper 12 { 13 //Web.config 配置 14 // <?xml version="1.0"?> 15 // 16 // <configuration> 17 // 18 // <!--指定配置節和命名空間聲明。clear:移除對繼承的節和節組的所有引用,只允許由當前 section 和 sectionGroup 元素添加的節和節組。remove:移除對繼承的節和節組的引用。section:定義配置節處理程序與配置元素之間的關聯。sectionGroup:定義配置節處理程序與配置節之間的關聯。--> 19 // <configSections> 20 // ............ 21 // </configSections> 22 // 23 // <!--appSettings是應用程序設置,可以定義應用程序的全局常量設置等信息--> 24 // <appSettings> 25 // .............. 26 // </appSettings> 27 // 28 // <!--連接字符串設置--> 29 // <connectionStrings> 30 // <add name="strCon" connectionString="Data Source=CUSTDB;user=HISSG_AG;password=HISSG_AG;"/> 31 // </connectionStrings> 32 // 33 // <system.web> 34 35 // </system.web> 36 // ................. 37 // ................. 38 // </configuration> 39 40 41 //要引入using System.Configuration命名空間 42 private static readonly string connectionString = ConfigurationManager.ConnectionStrings["strCon"].ConnectionString; 43 44 /// <summary> 45 /// 執行SQL語句,返回受影響的行數(用於insert,delete,update等) 46 /// </summary> 47 /// <param name="strSQL">SQL語句</param> 48 /// <returns>受影響的行數</returns> 49 public static int ExecuteSql(string strSQL) 50 { 51 //using: 釋放資源 52 //SqlConnection: 連接數據源 53 //connectionString:用於連接數據源的字符串 54 using (SqlConnection conn = new SqlConnection(connectionString)) 55 { 56 //SqlCommand對數據源執行SQl命令 57 //SqlCommand(CommandText, CommandString):strSQL需執行的SQL命令字符串,conn指定執行SQL命令需連接的數據源 58 using (SqlCommand cmd = new SqlCommand(strSQL, conn)) 59 { 60 try 61 { 62 conn.Open();//打開數據源連接 63 int rows = cmd.ExecuteNonQuery();//執行SQL語句,返回受影響的行數。如rows>0,說明執行成功 64 return rows; 65 } 66 catch (System.Data.SqlClient.SqlException e) 67 { 68 conn.Close();//出異常,關閉數據源連接 69 throw e; 70 } 71 } 72 } 73 } 74 75 /// <summary> 76 /// 執行帶參數的非查詢SQL 77 /// </summary> 78 /// <param name="strSQL">SQL語句</param> 79 /// <param name="values">參數</param> 80 /// <returns>受影響行數</returns> 81 public static int ExecuteCommand(string strSQL, params SqlParameter[] values) 82 { 83 using (SqlConnection conn = new SqlConnection(connectionString)) 84 { 85 using (SqlCommand cmd = new SqlCommand(strSQL, conn)) 86 { 87 try 88 { 89 conn.Open();//打開數據源連接 90 cmd.Parameters.AddRange(values); 91 int rows = cmd.ExecuteNonQuery();//執行SQL語句,返回受影響的行數。如rows>0,說明執行成功 92 return rows; 93 } 94 catch (System.Data.SqlClient.SqlException ex) 95 { 96 conn.Close();//出異常,關閉數據源連接 97 throw new Exception(string.Format("執行{0}失敗:{1}", strSQL, ex.Message)); 98 } 99 } 100 } 101 } 102 103 /// <summary> 104 /// 執行查詢SQL語句,返回SqlDataReader(只進記錄集) ( 注意:調用該方法后,一定要對SqlDataReader進行Close ) 105 /// </summary> 106 /// <param name="strSQL">查詢語句</param> 107 /// <returns>SqlDataReader</returns> 108 public static SqlDataReader ExecuteReader(string strSQL) 109 { 110 using (SqlConnection conn = new SqlConnection(connectionString)) 111 { 112 using (SqlCommand cmd = new SqlCommand(strSQL, conn)) 113 { 114 try 115 { 116 conn.Open();//打開數據源連接 117 //CommandBehavior.CloseConnection 能夠保證當SqlDataReader對象被關閉時,其依賴的連接也會被自動關閉。 118 SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); 119 return myReader; 120 } 121 catch (System.Data.SqlClient.SqlException ex) 122 { 123 conn.Close();//出異常,關閉數據源連接 124 throw new Exception(string.Format("執行{0}失敗:{1}", strSQL, ex.Message)); 125 } 126 } 127 } 128 } 129 130 /// <summary> 131 /// 執行帶參數的查詢SQL語句,返回SqlDataReader ( 注意:調用該方法后,一定要對SqlDataReader進行Close ) 132 /// </summary> 133 /// <param name="strSQL">查詢語句</param> 134 /// <param name="values">參數</param> 135 /// <returns>SqlDataReader</returns> 136 public static SqlDataReader ExecuteReader(string strSQL, params SqlParameter[] values) 137 { 138 using (SqlConnection conn = new SqlConnection(connectionString)) 139 { 140 using (SqlCommand cmd = new SqlCommand(strSQL, conn)) 141 { 142 try 143 { 144 conn.Open();//打開數據源連接 145 //CommandBehavior.CloseConnection 能夠保證當SqlDataReader對象被關閉時,其依賴的連接也會被自動關閉。 146 cmd.Parameters.AddRange(values); 147 SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); 148 return myReader; 149 } 150 catch (System.Data.SqlClient.SqlException ex) 151 { 152 conn.Close();//出異常,關閉數據源連接 153 throw new Exception(string.Format("執行{0}失敗:{1}", strSQL, ex.Message)); 154 } 155 } 156 } 157 } 158 159 160 ///////DataReader和DataSet的區別 161 ///////1.獲取數據的方式: 162 /////// DataReader(在線-一直占用SqlConnection連接,其它操作就可以不可使用,占用內存較小) 163 /////// DataSet(離線-將數據一次性讀入內存,然后斷開連接,其它操作就可以使用,比較消耗資源) 164 ///////2.獲取數據的機制 165 /////// DataReader是通過IDbCommand.ExecuteReader來讀取數據。 166 /////// DataSet則是通過DbDataAdapter.Fill來填充數據 167 ///////3.其它區別 168 /////// DataReader讀取速度快於DataSet。 169 /////// DataReader是數據提供者類,DataSet是一般性類,借助於DbDataAdapter來填充數據。 170 ///////...............................等 171 172 173 /// <summary> 174 /// 執行查詢SQL語句,返回離線記錄集 175 /// </summary> 176 /// <param name="strSQL">SQL語句</param> 177 /// <returns>離線記錄DataSet</returns> 178 public DataSet getDataTablebySQL(string strSQL) 179 { 180 using (SqlConnection conn = new SqlConnection(connectionString)) 181 { 182 using (SqlCommand cmd = new SqlCommand(strSQL, conn)) 183 { 184 try 185 { 186 conn.Open();//打開數據源連接 187 DataSet ds = new DataSet(); 188 SqlDataAdapter myAdapter = new SqlDataAdapter(cmd); 189 myAdapter.Fill(ds); 190 return ds; 191 } 192 catch (System.Data.SqlClient.SqlException ex) 193 { 194 conn.Close();//出異常,關閉數據源連接 195 throw new Exception(string.Format("執行{0}失敗:{1}", strSQL, ex.Message)); 196 } 197 } 198 } 199 } 200 201 /// <summary> 202 /// 執行帶參數的查詢SQL,返回離線記錄集 203 /// </summary> 204 /// <param name="strSQL"></param> 205 /// <returns></returns> 206 public DataSet getDataTablebySQL(string strSQL, params SqlParameter[] values) 207 { 208 using (SqlConnection conn = new SqlConnection(connectionString)) 209 { 210 using (SqlCommand cmd = new SqlCommand(strSQL, conn)) 211 { 212 try 213 { 214 conn.Open();//打開數據源連接 215 DataSet ds = new DataSet(); 216 cmd.Parameters.AddRange(values); 217 SqlDataAdapter myAdapter = new SqlDataAdapter(cmd); 218 myAdapter.Fill(ds); 219 return ds; 220 } 221 catch (System.Data.SqlClient.SqlException ex) 222 { 223 conn.Close();//出異常,關閉數據源連接 224 throw new Exception(string.Format("執行{0}失敗:{1}", strSQL, ex.Message)); 225 } 226 } 227 } 228 } 229 230 /// <summary> 231 /// 執行查詢SQL語句,返回離線記錄集 232 /// </summary> 233 /// <param name="strSQL">SQL語句</param> 234 /// <returns>離線記錄DataSet</returns> 235 public DataTable getDataTablebySQL(string strSQL) 236 { 237 using (SqlConnection conn = new SqlConnection(connectionString)) 238 { 239 using (SqlCommand cmd = new SqlCommand(strSQL, conn)) 240 { 241 try 242 { 243 conn.Open();//打開數據源連接 244 DataSet ds = new DataSet(); 245 SqlDataAdapter myAdapter = new SqlDataAdapter(cmd); 246 myAdapter.Fill(ds); 247 return ds.Tables[0]; 248 } 249 catch (System.Data.SqlClient.SqlException ex) 250 { 251 conn.Close();//出異常,關閉數據源連接 252 throw new Exception(string.Format("執行{0}失敗:{1}", strSQL, ex.Message)); 253 } 254 } 255 } 256 } 257 258 /// <summary> 259 /// 執行帶參數的查詢SQL,返回離線記錄集 260 /// </summary> 261 /// <param name="strSQL"></param> 262 /// <returns></returns> 263 public DataTable getDataTablebySQL(string strSQL,params SqlParameter[] values) 264 { 265 using (SqlConnection conn = new SqlConnection(connectionString)) 266 { 267 using (SqlCommand cmd = new SqlCommand(strSQL, conn)) 268 { 269 try 270 { 271 conn.Open();//打開數據源連接 272 DataSet ds = new DataSet(); 273 cmd.Parameters.AddRange(values); 274 SqlDataAdapter myAdapter = new SqlDataAdapter(cmd); 275 myAdapter.Fill(ds); 276 return ds.Tables[0]; 277 } 278 catch (System.Data.SqlClient.SqlException ex) 279 { 280 conn.Close();//出異常,關閉數據源連接 281 throw new Exception(string.Format("執行{0}失敗:{1}", strSQL, ex.Message)); 282 } 283 } 284 } 285 } 286 } 287 }