Program.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data.SQLite;
  4. using System.IO;
  5. using System.Security.Cryptography;
  6. using System.Text;
  7. namespace SqliteTest
  8. {
  9. internal class Program
  10. {
  11. static void Main(string[] args)
  12. {
  13. // 数据库路径(当前目录下的 test.db 文件)
  14. string dbPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UserMessage.db");
  15. var dbHelper = new UserMessSqliteDataClass(dbPath);
  16. string password = "123456";
  17. // 插入示例数据
  18. dbHelper.InsertUserMessage(new UserMesDataModelClass
  19. {
  20. UserName = "admin",
  21. PassWord = dbHelper.HashPassword(password),
  22. UserMes = "管理员账户",
  23. IsDelete = 0,
  24. IsAdmin = 1,
  25. DateTime = DateTime.Now
  26. });
  27. // 查询并打印数据
  28. var ErrMessage = dbHelper.GetAllUserMessage();
  29. foreach (var Message in ErrMessage)
  30. {
  31. //if(Message.PassWord == dbHelper.HashPassword("123456"))
  32. //{
  33. Console.WriteLine($"ID:{Message.Id},用户名: {Message.UserName}, 密码: {Message.PassWord}, " +
  34. $"用户信息: {Message.UserMes}");
  35. //}
  36. }
  37. //dbHelper.ChangePassWord(1, "333", "555");
  38. //// 查询并打印数据
  39. //ErrMessage = dbHelper.GetUserMessageForName("root");
  40. //foreach (var Message in ErrMessage)
  41. //{
  42. // //if (Message.PassWord == dbHelper.HashPassword("333"))
  43. // //{
  44. // Console.WriteLine($"ID:{Message.Id},用户名: {Message.UserName}, 密码: {Message.PassWord}, " +
  45. // $"用户信息: {Message.UserMes}");
  46. // //}
  47. //}
  48. //// 数据库路径(当前目录下的 test.db 文件)
  49. //string dbPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "test.db");
  50. //var dbHelper = new SqliteDataClass(dbPath);
  51. //// 插入示例数据
  52. //dbHelper.InsertErrMessage(new ErrMessageDataModel { Number = 1, Category = "系统", MessageType = "通知", Message = "相机启动失败", DateTime = DateTime.Now });
  53. //dbHelper.InsertErrMessage(new ErrMessageDataModel { Number = 2, Category = "变更", MessageType = "记录", Message = "曝光值更改", DateTime = DateTime.Now });
  54. //// 查询并打印数据
  55. //var ErrMessage = dbHelper.GetAllErrMessage();
  56. //foreach (var Message in ErrMessage)
  57. //{
  58. // Console.WriteLine($"编号: {Message.Number}, 类别: {Message.Category}, " +
  59. // $"类型: {Message.MessageType}, 信息: {Message.Message}" +
  60. // $"用户:{Message.UserID}");
  61. //}
  62. }
  63. }
  64. public class ErrMessageDataModel
  65. {
  66. /// <summary>
  67. /// 主键
  68. /// </summary>
  69. public int ID { get; set; }
  70. /// <summary>
  71. /// 错误编号
  72. /// </summary>
  73. public int Number { get; set; }
  74. /// <summary>
  75. /// 信息类别
  76. /// </summary>
  77. public string Category { get; set; }
  78. /// <summary>
  79. /// 信息类型
  80. /// </summary>
  81. public string MessageType { get; set; }
  82. /// <summary>
  83. /// 错误信息
  84. /// </summary>
  85. public string Message { get; set; }
  86. /// <summary>
  87. /// 记录时间
  88. /// </summary>
  89. public DateTime DateTime { get; set; }
  90. /// <summary>
  91. /// 用户ID
  92. /// </summary>
  93. public int UserID { get; set; }
  94. }
  95. public class SqliteDataClass
  96. {
  97. private readonly string _dbPath;
  98. public SqliteDataClass(string dbPath)
  99. {
  100. _dbPath = dbPath;
  101. InitializeDatabase();
  102. }
  103. // 初始化数据库和表
  104. private void InitializeDatabase()
  105. {
  106. if (!File.Exists(_dbPath))
  107. {
  108. SQLiteConnection.CreateFile(_dbPath);
  109. }
  110. using (var conn = new SQLiteConnection($"Data Source={_dbPath};Version=3;"))
  111. {
  112. conn.Open();
  113. string createTableSql = @"
  114. CREATE TABLE IF NOT EXISTS ErrMessage (
  115. Id INTEGER PRIMARY KEY AUTOINCREMENT,
  116. Number INTEGER NOT NULL,
  117. Category TEXT NOT NULL,
  118. MessageType TEXT NOT NULL,
  119. Message TEXT NOT NULL,
  120. DateTime TEXT NOT NULL,
  121. UserID INTEGER NOT NULL
  122. )";
  123. new SQLiteCommand(createTableSql, conn).ExecuteNonQuery();
  124. }
  125. }
  126. // 插入数据
  127. public void InsertErrMessage(ErrMessageDataModel Message)
  128. {
  129. using (var conn = new SQLiteConnection($"Data Source={_dbPath};Version=3;"))
  130. {
  131. conn.Open();
  132. string sql = "INSERT INTO ErrMessage (Number, Category, MessageType,Message,DateTime,UserID) VALUES (@Number, @Category, @MessageType,@Message, @DateTime, @UserID)";
  133. var cmd = new SQLiteCommand(sql, conn);
  134. cmd.Parameters.AddWithValue("@Number", Message.Number);
  135. cmd.Parameters.AddWithValue("@Category", Message.Category);
  136. cmd.Parameters.AddWithValue("@MessageType", Message.MessageType);
  137. cmd.Parameters.AddWithValue("@Message", Message.Message);
  138. cmd.Parameters.AddWithValue("@DateTime", Message.DateTime.ToString("yyyy-MM-dd HH:mm:ss.fff")); // 格式化为字符串
  139. cmd.Parameters.AddWithValue("@UserID", Message.UserID);
  140. cmd.ExecuteNonQuery();
  141. }
  142. }
  143. // 查询所有数据
  144. public List<ErrMessageDataModel> GetAllErrMessage()
  145. {
  146. var persons = new List<ErrMessageDataModel>();
  147. using (var conn = new SQLiteConnection($"Data Source={_dbPath};Version=3;"))
  148. {
  149. conn.Open();
  150. string sql = "SELECT * FROM ErrMessage";
  151. var cmd = new SQLiteCommand(sql, conn);
  152. using (SQLiteDataReader reader = cmd.ExecuteReader())
  153. {
  154. while (reader.Read())
  155. {
  156. persons.Add(new ErrMessageDataModel
  157. {
  158. Number = Convert.ToInt32(reader["Number"]),
  159. Category = reader["Category"].ToString(),
  160. MessageType = reader["MessageType"].ToString(),
  161. Message = reader["Message"].ToString(),
  162. UserID = Convert.ToInt32(reader["UserID"]),
  163. // 解析时间字符串
  164. DateTime = DateTime.Parse(reader["DateTime"].ToString())
  165. });
  166. }
  167. }
  168. }
  169. return persons;
  170. }
  171. }
  172. public class UserMessSqliteDataClass
  173. {
  174. private readonly string _dbPath;
  175. public UserMessSqliteDataClass(string dbPath)
  176. {
  177. _dbPath = dbPath;
  178. // 1. 获取文件夹路径
  179. string directoryPath = Path.GetDirectoryName(dbPath);
  180. // 2. 检查文件夹是否存在
  181. if (!Directory.Exists(directoryPath))
  182. {
  183. // 创建文件夹
  184. Directory.CreateDirectory(directoryPath);
  185. }
  186. InitializeDatabase();
  187. }
  188. // 初始化数据库和表
  189. private void InitializeDatabase()
  190. {
  191. if (!File.Exists(_dbPath))
  192. {
  193. SQLiteConnection.CreateFile(_dbPath);
  194. }
  195. using (var conn = new SQLiteConnection($"Data Source={_dbPath};Version=3;"))
  196. {
  197. conn.Open();
  198. string createTableSql = @"
  199. CREATE TABLE IF NOT EXISTS UserMessage (
  200. Id INTEGER PRIMARY KEY AUTOINCREMENT,
  201. UserName TEXT NOT NULL,
  202. PassWord TEXT NOT NULL,
  203. UserMes TEXT NOT NULL,
  204. DateTime TEXT NOT NULL,
  205. IsDelete INTEGER CHECK (IsDelete IN (0, 1)),
  206. IsAdmin INTEGER CHECK (IsAdmin IN (0, 1))
  207. )";
  208. new SQLiteCommand(createTableSql, conn).ExecuteNonQuery();
  209. }
  210. }
  211. // 插入数据
  212. public void InsertUserMessage(UserMesDataModelClass Message)
  213. {
  214. using (var conn = new SQLiteConnection($"Data Source={_dbPath};Version=3;"))
  215. {
  216. conn.Open();
  217. string sql = "INSERT INTO UserMessage (UserName, PassWord,UserMes,IsDelete,IsAdmin,DateTime) VALUES (@UserName, @PassWord,@UserMes,@IsDelete,@IsAdmin,@DateTime)";
  218. var cmd = new SQLiteCommand(sql, conn);
  219. cmd.Parameters.AddWithValue("@UserName", Message.UserName);
  220. cmd.Parameters.AddWithValue("@PassWord", Message.PassWord);
  221. cmd.Parameters.AddWithValue("@UserMes", Message.UserMes);
  222. cmd.Parameters.AddWithValue("@IsDelete", Message.IsDelete);
  223. cmd.Parameters.AddWithValue("@IsAdmin", Message.IsAdmin);
  224. cmd.Parameters.AddWithValue("@DateTime", Message.DateTime.ToString("yyyy-MM-dd HH:mm:ss.fff")); // 格式化为字符串
  225. cmd.ExecuteNonQuery();
  226. }
  227. }
  228. // 查询所有数据
  229. public List<UserMesDataModelClass> GetAllUserMessage()
  230. {
  231. var persons = new List<UserMesDataModelClass>();
  232. using (var conn = new SQLiteConnection($"Data Source={_dbPath};Version=3;"))
  233. {
  234. conn.Open();
  235. string sql = "SELECT * FROM UserMessage WHERE IsDelete=0";
  236. var cmd = new SQLiteCommand(sql, conn);
  237. using (SQLiteDataReader reader = cmd.ExecuteReader())
  238. {
  239. while (reader.Read())
  240. {
  241. persons.Add(new UserMesDataModelClass
  242. {
  243. UserName = reader["UserName"].ToString(),
  244. PassWord = reader["PassWord"].ToString(),
  245. UserMes = reader["UserMes"].ToString(),
  246. // 解析时间字符串
  247. DateTime = DateTime.Parse(reader["DateTime"].ToString())
  248. });
  249. }
  250. }
  251. }
  252. return persons;
  253. }
  254. public string HashPassword(string password)
  255. {
  256. using (SHA256 sha256 = SHA256.Create())
  257. {
  258. byte[] bytes = sha256.ComputeHash(Encoding.UTF8.GetBytes(password));
  259. StringBuilder builder = new StringBuilder();
  260. for (int i = 0; i < bytes.Length; i++)
  261. {
  262. builder.Append(bytes[i].ToString("x2"));
  263. }
  264. return builder.ToString();
  265. }
  266. }
  267. public List<UserMesDataModelClass> GetUserMessageForName(string UserName)
  268. {
  269. var persons = new List<UserMesDataModelClass>();
  270. using (var conn = new SQLiteConnection($"Data Source={_dbPath};Version=3;"))
  271. {
  272. conn.Open();
  273. string sql = "SELECT * FROM UserMessage WHERE UserName = @UserName";
  274. var cmd = new SQLiteCommand(sql, conn);
  275. cmd.Parameters.AddWithValue("@UserName", UserName);
  276. using (SQLiteDataReader reader = cmd.ExecuteReader())
  277. {
  278. while (reader.Read())
  279. {
  280. persons.Add(new UserMesDataModelClass
  281. {
  282. Id = Convert.ToInt32(reader["Id"]),
  283. UserName = reader["UserName"].ToString(),
  284. PassWord = reader["PassWord"].ToString(),
  285. UserMes = reader["UserMes"].ToString(),
  286. // 解析时间字符串
  287. DateTime = DateTime.Parse(reader["DateTime"].ToString())
  288. });
  289. }
  290. }
  291. }
  292. return persons;
  293. }
  294. public bool ChangePassWord(int Id, string OldPassWord, string NewPassWord)
  295. {
  296. bool result = false;
  297. using (var conn = new SQLiteConnection($"Data Source={_dbPath};Version=3;"))
  298. {
  299. conn.Open();
  300. string sql = "UPDATE UserMessage SET PassWord = @PassWord WHERE Id = @Id";
  301. var cmd = new SQLiteCommand(sql, conn);
  302. cmd.Parameters.AddWithValue("@PassWord", HashPassword(NewPassWord));
  303. cmd.Parameters.AddWithValue("@Id", Id);
  304. cmd.ExecuteNonQuery();
  305. result = true;
  306. }
  307. return result;
  308. }
  309. }
  310. public class UserMesDataModelClass
  311. {
  312. public int Id { get; set; }
  313. public string UserName { get; set; }
  314. public string PassWord { get; set; }
  315. public string UserMes { get; set; }
  316. public DateTime DateTime { get; set; }
  317. public int IsDelete { get; set; }
  318. public int IsAdmin { get; set; }
  319. }
  320. }