数据库登录注册创建角色
2017-11-10 20:40
197 查看
public bool CanRegister(string id) throw Exception {//为了抛出异常,所以直接引用throw Exception if(!IsSafe(id)) { throw new Exception("对不起,请输入合法的字符"); //return false;节省了这一步 } } //用try catch 来捕获异常,如果捕获到了异常就说明出错了
using System; using MySql.Data; using MySql.Data.MySqlClient; using System.Data; using System.Text.RegularExpressions; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using System.IO; public class DataMgr { MySqlConnection sqlConn; //单例模式 public static DataMgr instance; public DataMgr() { instance = this; Connect(); } //连接 public void Connect() { //数据库 string connStr = "Database=game;Data Source=127.0.0.1;"; connStr += "User Id=root;Password=123456;port=3306";//拼接字符串 sqlConn = new MySqlConnection(connStr); try { sqlConn.Open(); } catch (Exception e) { Console.Write("[DataMgr]Connect " + e.Message); return; } } //判定安全字符串 public bool IsSafeStr(string str) { return !Regex.IsMatch(str, @"[-|;|,|\/|\(|\)|\[|\]|\}|\{|%|@|\*|!|\']"); } //是否存在该用户 private bool CanRegister(string id) { //防sql注入 if (!IsSafeStr(id)) return false; //查询id是否存在 string cmdStr = string.Format("select * from user where id='{0}';", id); MySqlCommand cmd = new MySqlCommand (cmdStr, sqlConn); try { MySqlDataReader dataReader = cmd.ExecuteReader (); bool hasRows = dataReader.HasRows; dataReader.Close(); return !hasRows; } catch(Exception e) { Console.WriteLine("[DataMgr]CanRegister fail " + e.Message); return false; } } //注册 public bool Register(string id, string pw) { //防sql注入 if (!IsSafeStr (id) || !IsSafeStr (pw)) { Console.WriteLine("[DataMgr]Register 使用非法字符"); return false; } //能否注册 if (!CanRegister(id)) { Console.WriteLine("[DataMgr]Register !CanRegister"); return false; } //写入数据库User表 string cmdStr = string.Format("insert into user set id ='{0}' ,pw ='{1}';", id, pw); MySqlCommand cmd = new MySqlCommand(cmdStr, sqlConn); try { cmd.ExecuteNonQuery(); return true; } catch(Exception e) { Console.WriteLine("[DataMgr]Register " + e.Message); return false; } } //创建角色 public bool CreatePlayer(string id) { //防sql注入 if (!IsSafeStr(id)) return false; //序列化 IFormatter formatter = new BinaryFormatter (); MemoryStream stream = new MemoryStream (); PlayerData playerData = new PlayerData (); try { formatter.Serialize(stream, playerData); } catch(Exception e) { Console.WriteLine("[DataMgr]CreatePlayer 序列化 " + e.Message); return false; } byte[] byteArr = stream.ToArray(); //写入数据库 string cmdStr = string.Format ("insert into player set id ='{0}' ,data =@data;",id); MySqlCommand cmd = new MySqlCommand (cmdStr, sqlConn); //cmd的参数是一个字典,键是参数名,@data,值是byte数组 cmd.Parameters.Add ("@data", MySqlDbType.Blob); cmd.Parameters[0].Value = byteArr; try { cmd.ExecuteNonQuery (); return true; } catch (Exception e) { Console.WriteLine("[DataMgr]CreatePlayer 写入 " + e.Message); return false; } } //检测用户名密码 public bool CheckPassWord(string id, string pw) { //防sql注入 if (!IsSafeStr (id)||!IsSafeStr (pw)) return false; //查询 string cmdStr = string.Format("select * from user where id='{0}' and pw='{1}';", id, pw); MySqlCommand cmd = new MySqlCommand (cmdStr, sqlConn); try { MySqlDataReader dataReader = cmd.ExecuteReader(); bool hasRows = dataReader.HasRows; dataReader.Close(); return hasRows; } catch(Exception e) { Console.WriteLine("[DataMgr]CheckPassWord " + e.Message); return false; } } //获取玩家数据 public PlayerData GetPlayerData(string id) { PlayerData playerData = null; //防sql注入 if (!IsSafeStr(id)) return playerData; //查询 string cmdStr = string.Format("select * from player where id ='{0}';", id); MySqlCommand cmd = new MySqlCommand (cmdStr, sqlConn); byte[] buffer; try { MySqlDataReader dataReader = cmd.ExecuteReader(); if(!dataReader.HasRows) { dataReader.Close(); return playerData; } dataReader.Read(); long len = dataReader.GetBytes(1, 0, null, 0, 0);//1是data buffer = new byte[len]; dataReader.GetBytes(1, 0, buffer, 0, (int)len); dataReader.Close(); } catch(Exception e) { Console.WriteLine("[DataMgr]GetPlayerData 查询 " + e.Message); return playerData; } //反序列化 MemoryStream stream = new MemoryStream(buffer); try { BinaryFormatter formatter = new BinaryFormatter(); playerData = (PlayerData)formatter.Deserialize(stream); return playerData; } catch (SerializationException e) { Console.WriteLine("[DataMgr]GetPlayerData 反序列化 " + e.Message); return playerData; } } //保存角色 public bool SavePlayer(Player player) { string id = player.id; PlayerData playerData = player.data; //序列化 IFormatter formatter = new BinaryFormatter (); MemoryStream stream = new MemoryStream (); try { formatter.Serialize(stream, playerData); } catch(Exception e) { Console.WriteLine("[DataMgr]SavePlayer 序列化 " + e.Message); return false; } byte[] byteArr = stream.ToArray(); //写入数据库 string formatStr = "update player set data =@data where id = '{0}';"; string cmdStr = string.Format (formatStr , player.id); MySqlCommand cmd = new MySqlCommand (cmdStr, sqlConn); cmd.Parameters.Add ("@data", MySqlDbType.Blob); cmd.Parameters[0].Value = byteArr; try { cmd.ExecuteNonQuery (); return true; } catch (Exception e) { Console.WriteLine("[DataMgr]CreatePlayer 写入 " + e.Message); return false; } } }
相关文章推荐
- SQL语句创建登录名,数据库用户,数据库角色及分配权限:
- SQL语句创建登录名,数据库用户,数据库角色及分配权限
- 在cmd、C#中使用命令为PostgreSQL创建数据库、登录角色,并对数据库进行备份和恢复
- 数据库中登录名,用户,角色之我见——轻松走进数据库系列之一
- 利用html、css、javascript、php同时交互数据库制作的注册登录界面
- 创建或删除数据库登录名和用户
- 云盘小程序(Hbase数据库):注册,登录部分
- 数据库基础入门(四)— — 产品功能实现之数据库架构与用户登录注册
- java 与数据库连接 实现用户的注册和登录
- 连接数据库的登录注册退出页面
- 创建数据库动态管理用户、角色、权限和资源服务
- 注册-登录-数据都存在数据库里面-注册的时候,密码存的是加密之后的密码-登录成功之后打印当前的日期
- mysql 创建用户 远程登录数据库
- 使用JFinal框架连接数据库,实现注册、登录功能
- struts2连接数据库实现用户注册与登录
- Jimoshi_整合三大框架(一)--创建整合maven项目(SSH项目)、简单的测试示例(登录)、加载数据库模拟数据
- 用SQL创建数据库登录用户
- 关于asp.net网站发布后,使用登录控件和注册控件时出现“数据库只读,无法进行数据更新”的解决方法
- [置顶] bootstrap创建登录注册页面
- 数据库中登录名,用户,角色之我见——轻松走进数据库系列之一