1 using System;
  2 using System.Collections.Generic;
  3 using System.Text;
  4 using System.Configuration;
  5 using System.Data.SqlClient;
  6 using System.Data;
  7 using System.Collections;
  8
  9 namespace Common
 10 {
 11     /// <summary>
 12     /// SqlHelper类提供很高的数据访问性能,
 13     /// 使用SqlClient类的通用定义.
 14     /// </summary>
 15     public abstract class SqlHelper
 16     {
 17         //定义数据库连接串
 18         public static readonly string CONN_STRING =
 19             ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString;
 20
 21         public static readonly string CONN = "server=.;uid=sa;pwd=sa;database=MyOffice";
 22         // 存贮Cache缓存的Hashtable集合
 23         private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());
 24
 25         /// <summary>
 26         /// 使用连接字符串,执行一个SqlCommand命令(没有记录返回)
 27         /// 使用提供的参数集.
 28         /// </summary>
 29         /// <param name="connectionString">一个有效的SqlConnection连接串</param>
 30         /// <param name="commandType">命令类型CommandType(stored procedure, text, etc.)</param>
 31         /// <param name="commandText">存贮过程名称或是一个T-SQL语句串</param>
 32         /// <param name="commandParameters">执行命令的参数集</param>
 33         /// <returns>受此命令影响的行数</returns>
 34         public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
 35         {
 36
 37             SqlCommand cmd = new SqlCommand();
 38
 39             using (SqlConnection conn = new SqlConnection(connectionString))
 40             {
 41                 PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
 42
 43                 int val = cmd.ExecuteNonQuery();
 44
 45                 cmd.Parameters.Clear();
 46
 47                 return val;
 48             }
 49         }
 50
 51         /// <summary>
 52         /// 在一个存在的连接上执行数据库的命令操作
 53         /// 使用提供的参数集.
 54         /// </summary>
 55         /// <param name="conn">一个存在的数据库连接对象</param>
 56         /// <param name="commandType">命令类型CommandType (stored procedure, text, etc.)</param>
 57         /// <param name="commandText">存贮过程名称或是一个T-SQL语句串</param>
 58         /// <param name="commandParameters">执行命令的参数集</param>
 59         /// <returns>受此命令影响的行数</returns>
 60         public static int ExecuteNonQuery(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
 61         {
 62
 63             SqlCommand cmd = new SqlCommand();
 64
 65             PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
 66
 67             int val = cmd.ExecuteNonQuery();
 68
 69             cmd.Parameters.Clear();
 70
 71             return val;
 72
 73         }
 74
 75
 76         /// <summary>
 77         /// 在一个事务的连接上执行数据库的命令操作
 78         /// 使用提供的参数集.
 79         /// </summary>
 80         /// <param name="trans">一个存在的事务</param>
 81         /// <param name="commandType">命令类型CommandType (stored procedure, text, etc.)</param>
 82         /// <param name="commandText">存贮过程名称或是一个T-SQL语句串</param>
 83         /// <param name="commandParameters">执行命令的参数集</param>
 84         /// <returns>受此命令影响的行数</returns>
 85         public static int ExecuteNonQuery(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
 86         {
 87             SqlCommand cmd = new SqlCommand();
 88             PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters);
 89
 90             int val = cmd.ExecuteNonQuery();
 91
 92             cmd.Parameters.Clear();
 93
 94             return val;
 95         }
 96
 97         /// <summary>
 98         /// 在一个连接串上执行一个命令,返回一个SqlDataReader对象
 99         /// 使用提供的参数.
100         /// </summary>
101         /// <param name="connectionString">一个有效的SqlConnection连接串</param>
102         /// <param name="commandType">命令类型CommandType(stored procedure, text, etc.)</param>
103         /// <param name="commandText">存贮过程名称或是一个T-SQL语句串</param>
104         /// <param name="commandParameters">执行命令的参数集</param>
105         /// <returns>一个结果集对象SqlDataReader</returns>
106         public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
107         {
108             SqlCommand cmd = new SqlCommand();
109
110             SqlConnection conn = new SqlConnection(connectionString);
111
112
113             // 如果不存在要查询的对象,则发生异常
114             // 连接要关闭
115             // CommandBehavior.CloseConnection在异常时不发生作用
116             try
117             {
118                 PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
119
120                 SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
121
122                 cmd.Parameters.Clear();
123
124                 return rdr;
125             }
126             catch
127             {
128                 conn.Close();
129                 throw;
130             }
131         }
132
133
134
135         /// <summary>
136         /// 在一个连接串上执行一个命令,返回表中第一行,第一列的值
137         /// 使用提供的参数.
138         /// </summary>
139         /// <param name="connectionString">一个有效的SqlConnection连接串</param>
140         /// <param name="commandType">命令类型CommandType(stored procedure, text, etc.)</param>
141         /// <param name="commandText">存贮过程名称或是一个T-SQL语句串</param>
142         /// <param name="commandParameters">执行命令的参数集</param>
143         /// <returns>返回的对象,在使用时记得类型转换</returns>
144         public static  object  ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
145         {
146             SqlCommand cmd = new SqlCommand();
147
148             using (SqlConnection connection = new SqlConnection(connectionString))
149             {
150                 PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
151
152                 object  val = cmd.ExecuteScalar();
153
154                 cmd.Parameters.Clear();
155
156                 return val;
157             }
158         }
159
160
161
162         /// <summary>
163         /// 在一个连接上执行一个命令,返回表中第一行,第一列的值
164         /// 使用提供的参数.
165         /// </summary>
166         /// <param name="connectionString">一个有效的SqlConnection连接</param>
167         /// <param name="commandType">命令类型CommandType(stored procedure, text, etc.)</param>
168         /// <param name="commandText">存贮过程名称或是一个T-SQL语句串</param>
169         /// <param name="commandParameters">执行命令的参数集</param>
170         /// <returns>返回的对象,在使用时记得类型转换</returns>
171         public static object ExecuteScalar(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
172         {
173             SqlCommand cmd = new SqlCommand();
174
175             PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
176
177             object val = cmd.ExecuteScalar();
178
179             cmd.Parameters.Clear();
180
181             return val;
182         }
183
184         /// <summary>
185         /// 在一个连接串上执行一个命令,返回数据集
186         /// 使用提供的参数.
187         /// </summary>
188         /// <param name="connectionString">一个有效的SqlConnection连接串</param>
189         /// <param name="cmdType">命令类型CommandType(stored procedure, text, etc.)</param>
190         /// <param name="commandText">存贮过程名称或是一个T-SQL语句串</param>
191         /// <param name="commandParameters">执行命令的参数集</param>
192         /// <returns>返回数据集</returns>
193         public static DataSet ExecuteDataSet(string connectionString, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
194         {
195
196             SqlCommand cmd = new SqlCommand();
197
198             using (SqlConnection conn = new SqlConnection(connectionString))
199             {
200                 PrepareCommand(cmd, conn, null, commandType, commandText, commandParameters);
201
202                 SqlDataAdapter adapter = new SqlDataAdapter(cmd);
203                 DataSet ds = new DataSet();
204                 adapter.Fill(ds);
205
206                 cmd.Parameters.Clear();
207                 return ds;
208             }
209         }
210
211         /// <summary>
212         /// 在缓存中添加参数数组
213         /// </summary>
214         /// <param name="cacheKey">参数的Key</param>
215         /// <param name="cmdParms">参数数组</param>
216         public static void CacheParameters(string cacheKey, params SqlParameter[] commandParameters)
217         {
218             parmCache = commandParameters;
219         }
220
221
222
223         /// <summary>
224         /// 提取缓存的参数数组
225         /// </summary>
226         /// <param name="cacheKey">查找缓存的key</param>
227         /// <returns>返回被缓存的参数数组</returns>
228         public static SqlParameter[] GetCachedParameters(string cacheKey)
229         {
230             SqlParameter[] cachedParms = (SqlParameter[])parmCache;
231
232             if (cachedParms == null)
233                 return null;
234
235             SqlParameter[] clonedParms = new SqlParameter[cachedParms.Length];
236
237             for (int i = 0, j = cachedParms.Length; i < j; i++)
238                 clonedParms = (SqlParameter)((ICloneable)cachedParms).Clone();
239
240             return clonedParms;
241         }
242
243
244
245         /// <summary>
246         /// 提供一个SqlCommand对象的设置
247         /// </summary>
248         /// <param name="cmd">SqlCommand对象</param>
249         /// <param name="conn">SqlConnection 对象</param>
250         /// <param name="trans">SqlTransaction 对象</param>
251         /// <param name="cmdType">CommandType 如存贮过程,T-SQL</param>
252         /// <param name="cmdText">存贮过程名或查询串</param>
253         /// <param name="cmdParms">命令中用到的参数集</param>
254         private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
255         {
256             if (conn.State != ConnectionState.Open)
257                 conn.Open();
258
259             cmd.Connection = conn;
260             cmd.CommandText = cmdText;
261
262             if (trans != null)
263                 cmd.Transaction = trans;
264
265             cmd.CommandType = cmdType;
266
267             if (cmdParms != null)
268             {
269                 foreach (SqlParameter parm in cmdParms)
270                     cmd.Parameters.Add(parm);
271             }
272         }
273     }
274 }
275
276 ----访问----
277 using System;
278 using System.Collections.Generic;
279 using System.Text;
280 using System.Data;
281 using System.Data.SqlClient;
282 using Common;
283 using team1.Model;
284
285 namespace team1.SQLServerDAL
286 {
287
288
289     /// <summary>
290     /// 员工信息表的数据访问操作
291     /// </summary>
292     public partial class UserInfoService
293     {
294
295
296         /// <summary>
297         /// 获得所有员工信息表
298         /// </summary>
299         /// <returns>员工信息表集合</returns>
300         public IList<UserInfo> GetAllUserInfos2()
301         {
302             //string sql = "SELECT UserId,UserName,Password,DepartId,Gender,UserStateId " +
303             //    "FROM UserInfo";
304
305             IList<UserInfo> allUserInfos = new List<UserInfo>();
306
307             using (SqlDataReader rdr = SqlHelper.ExecuteReader(
308                 SqlHelper.CONN_STRING, CommandType.StoredProcedure, ""))
309             {
310                 while (rdr.Read())
311                 {
312                     UserInfo userInfo = new UserInfo();
313                     userInfo.UserId = (string)rdr["UserId"];
314                     userInfo.UserName = (string)rdr["UserName"];
315                     userInfo.Password = (string)rdr["Password"];
316                     userInfo.DepartId = (int)rdr["DepartId"];
317                     userInfo.Gender = (int)rdr["Gender"];
318                     userInfo.UserStateId = (int)rdr["UserStateId"];
319                     userInfo.UserStateName = (string)rdr["UserStateName"];
320                     userInfo.DepartName = (string)rdr["DepartName"];
321                     userInfo.RoleName = (string)rdr["RoleName"];
322
323                     allUserInfos.Add(userInfo);
324                 }
325             }
326
327             return allUserInfos;
328         }
329
330
331         #region 验证用户登陆信息
332
333         public UserInfo CheckLogin(string loginID, string loginPwd)
334         {
335             SqlParameter[] pas = new SqlParameter[]
336 {
337 new SqlParameter("@userId",SqlDbType.VarChar,50),
338 new SqlParameter("@password",SqlDbType.VarChar,50)
339 };
340
341             pas[0].Value = loginID;
342             pas[1].Value = loginPwd;
343
344             using (SqlDataReader rdr = SqlHelper.ExecuteReader(
345                 SqlHelper.CONN_STRING, CommandType.StoredProcedure, "", pas))
346             {
347                 if (rdr.Read())
348                 {
349                     UserInfo userInfo = new UserInfo();
350                     userInfo.UserId = (string)rdr["UserId"];
351                     userInfo.UserName = (string)rdr["UserName"];
352                     userInfo.Password = (string)rdr["Password"];
353                     userInfo.DepartId = (int)rdr["DepartId"];
354                     userInfo.Gender = (int)rdr["Gender"];
355                     userInfo.UserStateId = (int)rdr["UserStateId"];
356                     userInfo.DepartName = (string)rdr["DepartName"];
357                     userInfo.RoleName = (string)rdr["RoleName"];
358                     userInfo.RoleId = (int)rdr["RoleId"];
359                     return userInfo;
360                 }
361             }
362             return null;
363         }
364
365         /// <summary>
366         /// 判断用户名称是否存在
367         /// </summary>
368         /// <param name="loginID">用户登陆ID</param>
369         /// <returns></returns>
370         public bool CheckLoginByLoginId(string loginID)
371         {
372             string sql = "Select * from  userInfo where UserId='" + loginID + "'";
373             using (SqlDataReader rdr = SqlHelper.ExecuteReader(
374               SqlHelper.CONN_STRING, CommandType.Text, sql))
375             {
376                 if (rdr.Read())
377                 {
378                     return true;
379                 }
380                 return false;
381             }
382         }
383
384         //根据用户名称获得密码
385         public string CheckLoginByLoginPwd(string loginID)
386         {
387             string sql = "Select password from  userInfo where UserId='" + loginID + "'";
388             return (string)SqlHelper.ExecuteScalar(SqlHelper.CONN_STRING, CommandType.Text, sql);
389         }
390         #endregion
391
392         /// <summary>
393         /// 根据输入用户名前缀返回相关用户名
394         /// </summary>
395         /// <param name="foreName">用户输入姓名前缀</param>
396         /// <param name="count">数量</param>
397         /// <returns></returns>
398         public IList<string> GetUsersByPreName(string foreName, int count)
399         {
400             IList<string> user = new List<string>();
401
402             string sql = "select top " + count + " * from UserInfo where UserName like '" + foreName.Trim() + "%'";
403
404             using (SqlDataReader rdr = SqlHelper.ExecuteReader(SqlHelper.CONN_STRING, CommandType.Text, sql, null))
405             {
406                 int i = 0;
407                 while (rdr.Read())
408                 {
409
410                     UserInfo userInfo = new UserInfo();
411
412                     userInfo.UserId = (string)rdr["UserId"];
413                     userInfo.UserName = (string)rdr["UserName"];
414
415                     try
416                     {
417                         user.Add(userInfo.UserName);
418                     }
419                     catch (Exception ex)
420                     {
421                         Console.WriteLine(ex.Message);
422                     }
423
424
425                 }
426             }
427             return user;
428         }
429
430         /// <summary>
431         /// 点击搜索范围时根据条件进行查询所有用户姓名
432         /// </summary>
433         /// <param name="branchId">机构ID</param>
434         /// <param name="departId">部门ID</param>
435         /// <param name="loginId">工号</param>
436         /// <param name="userName">用户姓名</param>
437         /// <returns></returns>
438         public IList<UserInfo> GetUserInfoSearch(int branchId, int departId, string loginId, string userName)
439         {
440             string sql = "select u.userName,u.userId from userInfo u join departInfo " +
441             "d on(u.departId=d.departId) where 1=1";
442             if (branchId != 0)
443             {
444                 sql += " and d.branchId=" + branchId;
445             }
446             if (departId != 0)
447             {
448                 sql += " and u.departId =" + departId;
449             }
450             if (userName != null && !userName.Trim().Equals(""))
451             {
452                 sql += " and u.userName = '" + userName + "'";
453             }
454
455             if (loginId != null && !"".Equals(loginId.Trim()))
456             {
457                 sql += " and u.loginId='" + loginId + "'";
458             }
459
460             if (branchId == 0 && departId == 0 && loginId.Trim() == "" && userName.Trim() == "")
461             {
462                 return null;
463             }
464
465             IList<UserInfo> allUserInfos = new List<UserInfo>();
466
467             using (SqlDataReader rdr = SqlHelper.ExecuteReader(
468                 SqlHelper.CONN_STRING, CommandType.Text, sql))
469             {
470                 while (rdr.Read())
471                 {
472                     UserInfo userInfo = new UserInfo();
473                     userInfo.UserId = (string)rdr["UserId"];
474                     userInfo.UserName = (string)rdr["UserName"];
475                     allUserInfos.Add(userInfo);
476                 }
477
478                 return allUserInfos;
479             }
480         }
481
482
483         public IList<UserInfo> GetUserInfoByDepartId(int departId)
484         {
485             string sql = "SELECT UserId,UserName,Password,DepartId,Gender,UserStateId FROM UserInfo where departId = " + departId;
486
487             IList<UserInfo> userInfoList = new List<UserInfo>();
488
489             using (SqlDataReader rdr = SqlHelper.ExecuteReader(
490                 SqlHelper.CONN_STRING, CommandType.Text, sql))
491             {
492                 while (rdr.Read())
493                 {
494                     UserInfo userInfo = new UserInfo();
495                     userInfo.UserId = (string)rdr["UserId"];
496                     userInfo.UserName = (string)rdr["UserName"];
497                     userInfo.Password = (string)rdr["Password"];
498                     userInfo.DepartId = (int)rdr["DepartId"];
499                     userInfo.Gender = (int)rdr["Gender"];
500                     userInfo.UserStateId = (int)rdr["UserStateId"];
501                     userInfoList.Add(userInfo);
502                 }
503             }
504
505             return userInfoList;
506
507         }
508
509         /// <summary>
510         /// 根据ID查询员工信息表2
511         /// </summary>
512         /// <param name="userId">员工信息表ID</param>
513         /// <returns>员工信息表对象</returns>
514         public UserInfo GetUserInfoByUserId2(string userId)
515         {
516             SqlParameter para = new SqlParameter("@UserId", SqlDbType.VarChar, 30);
517             para.Value = userId;
518             using (SqlDataReader rdr = SqlHelper.ExecuteReader(
519                 SqlHelper.CONN_STRING, CommandType.StoredProcedure, "", para))
520             {
521                 if (rdr.Read())
522                 {
523                     UserInfo userInfo = new UserInfo();
524                     userInfo.UserId = (string)rdr["UserId"];
525                     userInfo.UserName = (string)rdr["UserName"];
526                     userInfo.Password = (string)rdr["Password"];
527                     userInfo.DepartId = (int)rdr["DepartId"];
528                     userInfo.Gender = (int)rdr["Gender"];
529                     userInfo.UserStateId = (int)rdr["UserStateId"];
530
531                     userInfo.UserStateName = (string)rdr["UserStateName"];
532                     userInfo.DepartName = (string)rdr["DepartName"];
533                     userInfo.RoleName = (string)rdr["RoleName"];
534
535                     return userInfo;
536                 }
537             }
538
539             return null;
540         }
541
542         /// <summary>
543         ///  根据部门编号查询用户
544         /// </summary>
545         /// <param name="departId"></param>
546         /// <returns></returns>
547         public UserInfo GetUserByDepartId(int DepartId)
548         {
549             string sql = "SELECT UserId,UserName,Password,DepartId,Gender,UserStateId " +
550             "FROM UserInfo where departId = @DepartId";
551
552             SqlParameter pa = new SqlParameter("@DepartId", SqlDbType.Int, 4);
553             pa.Value = DepartId;
554
555             using (SqlDataReader rdr = SqlHelper.ExecuteReader(
556                 SqlHelper.CONN_STRING, CommandType.Text, sql, pa))
557             {
558                 while (rdr.Read())
559                 {
560                     UserInfo userInfo = new UserInfo();
561                     userInfo.UserId = (string)rdr["UserId"];
562                     userInfo.UserName = (string)rdr["UserName"];
563                     userInfo.Password = (string)rdr["Password"];
564                     userInfo.DepartId = (int)rdr["DepartId"];
565                     userInfo.Gender = (int)rdr["Gender"];
566                     userInfo.UserStateId = (int)rdr["UserStateId"];
567                     return userInfo;
568                 }
569             }
570
571             return null;
572
573         }
574     }
575 }

转载于:https://www.cnblogs.com/SoraAoi/archive/2013/04/28/3048400.html

SqlHelper和数据访问层相关推荐

  1. MyGeneration学习笔记(1) : 使用MyGeneration生成存储过程和数据访问层代码

    MyGenertion是一款不错的代码生成ORM代码生成工具,下面是我学习过程中的一些笔记(总结了一下dOOdads C# Quick Reference文档,还有自己在使用和调试过程中遇到的问题及自 ...

  2. 持久层和数据访问层_什么是持久层? JDBC 演变的 Mybatis 架构分析

    前言 ORM 持久层指的是:将业务数据存储到磁盘,也具备长期存储能力,只要磁盘不损坏,如果在断电情况下,重启系统仍然可以读取数据 01.JDBC 1.1 什么是 jdbc JDBC(JavaDataB ...

  3. 抽象工厂+反射+依赖注入 实现对数据访问层和业务逻辑层的优化

    分层思想的一个核心就是部件化,各个层之间是相互独立的,每一层可以随便抽取换成一个其他语言的版本,但只要与相应的接口吻合就行. 我用的三层架构大致是这样的,基本的三层就不说了,然后分别为业务逻辑层和数据 ...

  4. MVC 音乐商店 第 4 部分: 模型和数据访问

    MVC 音乐商店是介绍,并分步说明了如何使用 ASP.NET MVC 和 Visual Studio 为 web 开发教程应用程序. MVC 音乐商店是一个轻量级的示例存储实现它卖音乐专辑在线,并实现 ...

  5. HDFS权限管理、用户身份认证和数据访问授权、UGO权限管理、umask权限掩码、UGO权限相关命令、Web页面修改UGO权限

    HDFS权限管理 1.1 总览概述 作为分布式文件系统,HDFS也集成了一套兼容POSIX的权限管理系统.客户端在进行每次文件操时,系统会从用户身份认证和数据访问授权两个环节进行验证: 客户端的操作请 ...

  6. dNet项目数据访问层代码总结

    数据访问层,即DataAccess层. 下面放送一些奶酪: 实例1 using System; using System.Collections.Generic; using System.Linq; ...

  7. php数据访问层,对数据访问层第一种实现(Acc+SQL)的重构

    昨天的文章基于.NET平台的分层架构实战(七) 数据 访问 层的 第一 种 实现 :Access+SQL发布后,很多朋友对我的程序提出了意见和建议,在这里先谢谢你们!!!尤其是金色海洋(jyk),对我 ...

  8. 表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)

    三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI).业务逻辑层(BLL).数据访问层(DAL).区分层次的目的即为了"高内聚,低耦 ...

  9. android ui层 交互层 业务逻辑层 服务层,表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)...

    三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI).业务逻辑层(BLL).数据访问层(DAL).区分层次的目的即为了"高内聚,低耦 ...

  10. 三层架构:表示层-业务逻辑层-数据访问层

    三层架构和MVC是两个东西. 非要相关的话: 三层架构中"表现层"的aspx页面对应MVC中的View(继承的类不一样) 三层架构中"表现层"的aspx.cs页 ...

最新文章

  1. 【ACM】杭电OJ 2000
  2. 2. 动态分配字符串
  3. 我的Android进阶之旅------Android利用温度传感器实现带动画效果的电子温度计
  4. “~/” 代表应用程序根目录的一点误区
  5. C++ 多态的实现及原理
  6. 【CMAKE系列】cmake中CMakeLists.txt脚本的常用语法
  7. vue中ref的使用(this.$refs获取为undefined)
  8. Android中保存网络图片到SD卡
  9. 推荐几个适合 新手学习 软件逆向 脱壳破解 的网站
  10. 0506-铁矿石跌5%,美股大跌
  11. Java获取图片文件格式(后缀)
  12. c语言74hc595程序,74hc595使用方法与单片机驱动源程序
  13. 7 tips for using UIWebView
  14. performSelector一系列方法调用和延时调用导致的内存泄露
  15. 苹果手机微信声音小怎么调大声_苹果手机xr对方听不到我说话,通话质量差的问题...
  16. 神雕侠侣手游服务器维护,《神雕侠侣》2020年6月18日更新维护新服开启公告
  17. Markdown文档数学公式的使用
  18. html页面字体缩小模糊怎么解决,如何解决网页字体模糊的问题
  19. 数据库 之创建新用户
  20. 自学python入门训练营 李笑来_1901090043-自学训练营学习9群-PYTHON入门

热门文章

  1. matlab图像分割基于小波变换,图小波变换在图像分割中的应用研究
  2. 小米系统wifi服务器,如何将小米8se(MIUI10系统)设置wifi仅连2.4赫兹
  3. 使用tp5.1写api接口的流程
  4. php 通过file_get_contents获取其他页面的内容(以及模仿表单post提交)
  5. Spring Data JPA 概述 与 快速入门(操作 mysql 数据)
  6. Java 定时器 Timer 与 定时任务 TimeTask
  7. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_3_性能浪费的日志案例...
  8. 利用 Commons-Fileupload 实现文件上传分析(转)
  9. 断线的风筝,该飘向哪里
  10. Archlinux下启用Thinkpad功能键