SqlHelper和数据访问层
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和数据访问层相关推荐
- MyGeneration学习笔记(1) : 使用MyGeneration生成存储过程和数据访问层代码
MyGenertion是一款不错的代码生成ORM代码生成工具,下面是我学习过程中的一些笔记(总结了一下dOOdads C# Quick Reference文档,还有自己在使用和调试过程中遇到的问题及自 ...
- 持久层和数据访问层_什么是持久层? JDBC 演变的 Mybatis 架构分析
前言 ORM 持久层指的是:将业务数据存储到磁盘,也具备长期存储能力,只要磁盘不损坏,如果在断电情况下,重启系统仍然可以读取数据 01.JDBC 1.1 什么是 jdbc JDBC(JavaDataB ...
- 抽象工厂+反射+依赖注入 实现对数据访问层和业务逻辑层的优化
分层思想的一个核心就是部件化,各个层之间是相互独立的,每一层可以随便抽取换成一个其他语言的版本,但只要与相应的接口吻合就行. 我用的三层架构大致是这样的,基本的三层就不说了,然后分别为业务逻辑层和数据 ...
- MVC 音乐商店 第 4 部分: 模型和数据访问
MVC 音乐商店是介绍,并分步说明了如何使用 ASP.NET MVC 和 Visual Studio 为 web 开发教程应用程序. MVC 音乐商店是一个轻量级的示例存储实现它卖音乐专辑在线,并实现 ...
- HDFS权限管理、用户身份认证和数据访问授权、UGO权限管理、umask权限掩码、UGO权限相关命令、Web页面修改UGO权限
HDFS权限管理 1.1 总览概述 作为分布式文件系统,HDFS也集成了一套兼容POSIX的权限管理系统.客户端在进行每次文件操时,系统会从用户身份认证和数据访问授权两个环节进行验证: 客户端的操作请 ...
- dNet项目数据访问层代码总结
数据访问层,即DataAccess层. 下面放送一些奶酪: 实例1 using System; using System.Collections.Generic; using System.Linq; ...
- php数据访问层,对数据访问层第一种实现(Acc+SQL)的重构
昨天的文章基于.NET平台的分层架构实战(七) 数据 访问 层的 第一 种 实现 :Access+SQL发布后,很多朋友对我的程序提出了意见和建议,在这里先谢谢你们!!!尤其是金色海洋(jyk),对我 ...
- 表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)
三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI).业务逻辑层(BLL).数据访问层(DAL).区分层次的目的即为了"高内聚,低耦 ...
- android ui层 交互层 业务逻辑层 服务层,表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)...
三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI).业务逻辑层(BLL).数据访问层(DAL).区分层次的目的即为了"高内聚,低耦 ...
- 三层架构:表示层-业务逻辑层-数据访问层
三层架构和MVC是两个东西. 非要相关的话: 三层架构中"表现层"的aspx页面对应MVC中的View(继承的类不一样) 三层架构中"表现层"的aspx.cs页 ...
最新文章
- 【ACM】杭电OJ 2000
- 2. 动态分配字符串
- 我的Android进阶之旅------Android利用温度传感器实现带动画效果的电子温度计
- “~/” 代表应用程序根目录的一点误区
- C++ 多态的实现及原理
- 【CMAKE系列】cmake中CMakeLists.txt脚本的常用语法
- vue中ref的使用(this.$refs获取为undefined)
- Android中保存网络图片到SD卡
- 推荐几个适合 新手学习 软件逆向 脱壳破解 的网站
- 0506-铁矿石跌5%,美股大跌
- Java获取图片文件格式(后缀)
- c语言74hc595程序,74hc595使用方法与单片机驱动源程序
- 7 tips for using UIWebView
- performSelector一系列方法调用和延时调用导致的内存泄露
- 苹果手机微信声音小怎么调大声_苹果手机xr对方听不到我说话,通话质量差的问题...
- 神雕侠侣手游服务器维护,《神雕侠侣》2020年6月18日更新维护新服开启公告
- Markdown文档数学公式的使用
- html页面字体缩小模糊怎么解决,如何解决网页字体模糊的问题
- 数据库 之创建新用户
- 自学python入门训练营 李笑来_1901090043-自学训练营学习9群-PYTHON入门
热门文章
- matlab图像分割基于小波变换,图小波变换在图像分割中的应用研究
- 小米系统wifi服务器,如何将小米8se(MIUI10系统)设置wifi仅连2.4赫兹
- 使用tp5.1写api接口的流程
- php 通过file_get_contents获取其他页面的内容(以及模仿表单post提交)
- Spring Data JPA 概述 与 快速入门(操作 mysql 数据)
- Java 定时器 Timer 与 定时任务 TimeTask
- 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_3_性能浪费的日志案例...
- 利用 Commons-Fileupload 实现文件上传分析(转)
- 断线的风筝,该飘向哪里
- Archlinux下启用Thinkpad功能键