From 23be34d753c8c661650a887b615f48a9c0ac5fa1 Mon Sep 17 00:00:00 2001 From: lq_avenue <704528201@qq.com> Date: Sat, 22 Oct 2016 10:38:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=B5=8B=E8=AF=95=E6=96=87?= =?UTF-8?q?=E4=BB=B6=EF=BC=8C=E6=95=B0=E6=8D=AE=E5=BA=93=E8=84=9A=E6=9C=AC?= =?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=8A=A0Users=E5=8F=8A=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=8C=E6=96=B0=E5=BB=BAUser.cs=E5=92=8CUs?= =?UTF-8?q?erHelper.cs=EF=BC=8CUserHelperTests.cs=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bootstrap.Admin/Web.config | 4 + .../Bootstrap.DataAccess.csproj | 2 + Bootstrap.DataAccess/User.cs | 22 ++++ Bootstrap.DataAccess/UserHelper.cs | 108 ++++++++++++++++++ .../Bootstrap.DataAccessTests.csproj | 4 + Bootstrap.DataAccessTests/UserHelperTests.cs | 55 +++++++++ BootstrapAdmin.sln | 1 + DatabaseScripts/ExtendedChecker.sql | Bin 0 -> 13934 bytes 8 files changed, 196 insertions(+) create mode 100644 Bootstrap.DataAccess/User.cs create mode 100644 Bootstrap.DataAccess/UserHelper.cs create mode 100644 Bootstrap.DataAccessTests/UserHelperTests.cs create mode 100644 DatabaseScripts/ExtendedChecker.sql diff --git a/Bootstrap.Admin/Web.config b/Bootstrap.Admin/Web.config index 4091d0af..ca963fba 100644 --- a/Bootstrap.Admin/Web.config +++ b/Bootstrap.Admin/Web.config @@ -23,7 +23,11 @@ + + + + diff --git a/Bootstrap.DataAccess/Bootstrap.DataAccess.csproj b/Bootstrap.DataAccess/Bootstrap.DataAccess.csproj index 883ff9d6..37529f81 100644 --- a/Bootstrap.DataAccess/Bootstrap.DataAccess.csproj +++ b/Bootstrap.DataAccess/Bootstrap.DataAccess.csproj @@ -63,6 +63,8 @@ + + diff --git a/Bootstrap.DataAccess/User.cs b/Bootstrap.DataAccess/User.cs new file mode 100644 index 00000000..1d036039 --- /dev/null +++ b/Bootstrap.DataAccess/User.cs @@ -0,0 +1,22 @@ +namespace Bootstrap.DataAccess +{ + public class User + { + /// + /// 获得/设置 用户主键ID + /// + public int ID { get; set; } + /// + /// 获得/设置 用户名称 + /// + public string UserName { get; set; } + /// + /// 获取/设置 密码 + /// + public string Password { get; set; } + /// + /// 获取/设置 验证信息 + /// + public string PassSalt { get; set; } + } +} diff --git a/Bootstrap.DataAccess/UserHelper.cs b/Bootstrap.DataAccess/UserHelper.cs new file mode 100644 index 00000000..0807a949 --- /dev/null +++ b/Bootstrap.DataAccess/UserHelper.cs @@ -0,0 +1,108 @@ +using Longbow.Caching; +using Longbow.Caching.Configuration; +using Longbow.ExceptionManagement; +using System; +using System.Collections.Generic; +using System.Data; +using System.Data.Common; +using System.Globalization; +using System.Linq; + +namespace Bootstrap.DataAccess +{ + public static class UserHelper + { + private const string UserDataKey = "UserData-CodeUserHelper"; + + /// + /// 查询所有用户 + /// + /// + /// + public static IEnumerable RetrieveUsers(string tId = null) + { + string sql = "select * from Users"; + var ret = CacheManager.GetOrAdd(UserDataKey, CacheSection.RetrieveIntervalByKey(UserDataKey), key => + { + List Users = new List(); + DbCommand cmd = DBAccessManager.SqlDBAccess.CreateCommand(CommandType.Text, sql); + try + { + using (DbDataReader reader = DBAccessManager.SqlDBAccess.ExecuteReader(cmd)) + { + while (reader.Read()) + { + Users.Add(new User() + { + ID = (int)reader[0], + UserName = (string)reader[1], + Password = (string)reader[2], + PassSalt = (string)reader[3], + }); + } + } + } + catch (Exception ex) { ExceptionManager.Publish(ex); } + return Users; + }, CacheSection.RetrieveDescByKey(UserDataKey)); + return string.IsNullOrEmpty(tId) ? ret : ret.Where(t => tId.Equals(t.ID.ToString(), StringComparison.OrdinalIgnoreCase)); + } + + /// + /// 删除用户 + /// + /// + public static void DeleteUser(string ids) + { + if (string.IsNullOrEmpty(ids) || ids.Contains("'")) return; + string sql = string.Format(CultureInfo.InvariantCulture, "Delete from Users where ID in ({0})", ids); + using (DbCommand cmd = DBAccessManager.SqlDBAccess.CreateCommand(CommandType.Text, sql)) + { + DBAccessManager.SqlDBAccess.ExecuteNonQuery(cmd); + ClearCache(); + } + } + + /// + /// 保存新建/更新的用户信息 + /// + /// + /// + public static bool SaveUser(User p) + { + if (p == null) throw new ArgumentNullException("p"); + bool ret = false; + if (p.UserName.Length > 50) p.UserName.Substring(0, 50); + if (p.Password.Length > 50) p.Password.Substring(0, 50); + if (p.PassSalt.Length > 50) p.PassSalt.Substring(0, 50); + string sql = p.ID == 0 ? + "Insert Into Users (UserName, Password, PassSalt) Values (@UserName, @Password, @PassSalt)" : + "Update Users set UserName = @UserName, Password = @Password, PassSalt = @PassSalt where ID = @ID"; + try + { + using (DbCommand cmd = DBAccessManager.SqlDBAccess.CreateCommand(CommandType.Text, sql)) + { + cmd.Parameters.Add(DBAccessManager.SqlDBAccess.CreateParameter("@ID", p.ID, ParameterDirection.Input)); + cmd.Parameters.Add(DBAccessManager.SqlDBAccess.CreateParameter("@UserName", p.UserName, ParameterDirection.Input)); + cmd.Parameters.Add(DBAccessManager.SqlDBAccess.CreateParameter("@Password", p.Password, ParameterDirection.Input)); + cmd.Parameters.Add(DBAccessManager.SqlDBAccess.CreateParameter("@PassSalt", p.PassSalt, ParameterDirection.Input)); + DBAccessManager.SqlDBAccess.ExecuteNonQuery(cmd); + } + ret = true; + ClearCache(); + } + catch (DbException ex) + { + ExceptionManager.Publish(ex); + } + return ret; + } + + + // 更新缓存 + private static void ClearCache() + { + CacheManager.Clear(key => key.Contains("TerminalData-")); + } + } +} diff --git a/Bootstrap.DataAccessTests/Bootstrap.DataAccessTests.csproj b/Bootstrap.DataAccessTests/Bootstrap.DataAccessTests.csproj index 063f696c..aaa90f16 100644 --- a/Bootstrap.DataAccessTests/Bootstrap.DataAccessTests.csproj +++ b/Bootstrap.DataAccessTests/Bootstrap.DataAccessTests.csproj @@ -54,7 +54,11 @@ + + + + diff --git a/Bootstrap.DataAccessTests/UserHelperTests.cs b/Bootstrap.DataAccessTests/UserHelperTests.cs new file mode 100644 index 00000000..1fd8760a --- /dev/null +++ b/Bootstrap.DataAccessTests/UserHelperTests.cs @@ -0,0 +1,55 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System.Linq; + +namespace Bootstrap.DataAccess.Tests +{ + [TestClass] + public class UserHelperTests + { + [TestMethod] + public void RetrieveUsersTest() + { + var result = UserHelper.RetrieveUsers("1"); + Assert.IsTrue((result.Count() == 0 || result.Count() == 1), "带有参数的UserHelper.RetrieveUsers方法调用失败,请检查数据库连接或者数据库SQL语句"); + result = UserHelper.RetrieveUsers(); + Assert.IsTrue(result.Count() >= 0, "不带参数的UserHelper.RetrieveUsers方法调用失败,请检查数据库连接或者数据库SQL语句"); + } + + [TestMethod] + public void DeleteUserTest() + { + string ids = "2"; + try + { + UserHelper.DeleteUser(ids); + Assert.IsTrue(true); + } + catch + { + Assert.IsTrue(false,"带有参数的UserHelper.DeleteUserTest方法调用失败,请检查数据库连接或者数据库SQL语句"); + } + + } + + [TestMethod] + public void SaveUserTest() + { + User users = new User(); + users.ID = 0; + users.UserName = "liqi"; + users.Password = "123"; + users.PassSalt = "123"; + var result = UserHelper.SaveUser(users); + Assert.IsTrue(result == true, "带有参数的UserHelper.SaveUser方法中新建用户信息失败,请检查数据库连接或者数据库SQL语句"); + + User users1 = new User(); + users1.ID = 1; + users1.UserName = "Lily"; + users1.Password = "123456"; + users1.PassSalt = "123456"; + result = UserHelper.SaveUser(users1); + Assert.IsTrue(result == true, "带有参数的UserHelper.SaveUser方法中更新用户信息失败,请检查数据库连接或者数据库SQL语句"); + } + + } +} diff --git a/BootstrapAdmin.sln b/BootstrapAdmin.sln index ca1616e3..7903d1af 100644 --- a/BootstrapAdmin.sln +++ b/BootstrapAdmin.sln @@ -7,6 +7,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bootstrap.DataAccess", "Boo EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "sql", "sql", "{87319AF5-7C40-4362-B67C-35F9DD737DB4}" ProjectSection(SolutionItems) = preProject + DatabaseScripts\ExtendedChecker.sql = DatabaseScripts\ExtendedChecker.sql DatabaseScripts\Install.sql = DatabaseScripts\Install.sql DatabaseScripts\Proc_StartTerminal.sql = DatabaseScripts\Proc_StartTerminal.sql DatabaseScripts\Proc_StopTerminal.sql = DatabaseScripts\Proc_StopTerminal.sql diff --git a/DatabaseScripts/ExtendedChecker.sql b/DatabaseScripts/ExtendedChecker.sql new file mode 100644 index 0000000000000000000000000000000000000000..a108aca50bbcc7b0acd72f748687cb48b782c8e4 GIT binary patch literal 13934 zcmeHO%TC)s6un)x693>`LWOwsr6M7bCIO;CLi13mA{6nc1Z@f^0Sephs#a<@-Sls| z>9$h8f+b(j_M91pu^j_e6HB&iS&kob=gz(NT#t|Mz~4VDX-HWdY2)`)j^wrM%MN~b zq$s;MZp&Nz_GClG&Rfz~ z8vD4WB)0~}>B*iP!U9K1=u1neX-1}HN@lU~cN*7^ad%ptqV*xRIh;Sh9k)GG%0~Lt zL`y-c&|i@bjxAZi*1+8wuG}6O=@*cxpR1E@%xWFC7B*{}#in7PE8`N6Xa^fXka)zp~uV-c}EtIBRX^EVNDK^V=POM=)2~J zJ@nc~E2F=la;huGkkNhkdTsWgkNvtDrE2~%gvgC)(~&w zGsf0z?JjsNj_X$0+8tN+>^fV#*6wTur-8rli+-$maTfp8hp2Eddd=+WU44kd`s%Ok zi!bTLC-}|fMQNC-i^1RWBEA*Vv`Q2dfhc)Q`05Fni^U~;zpyOD>dvYzS=A+pRhPkM zH!Z9s8DH~J<74y>e#^&!xg@9RV&Z7u2%~+DtlmMShG8#OZ~E#kUf-i&EOrF*b#QaV zB=~QxgBk42n*OKuVy(@pFIn}4e~q8KRU~%~k9GzgoOk2$hD=8NB|2oRW;4rrzwYCJ aQ!;8WHj@3T|DdpS)?xnhAov~T#pxd