SQLiteModel.cs 43 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Data;
  5. using System.Data.Common;
  6. using System.Data.SQLite;
  7. namespace WpfTest1.SQLite
  8. {
  9. public class SQLiteModel
  10. {
  11. public static string dbPath = Toolkits.Constants.dbPath;
  12. #region 各类建表操作
  13. //Patient表的创建
  14. //Patient表的创建
  15. public static void CreatePatientTable()
  16. {
  17. //如果不存在改数据库文件,则创建该数据库文件
  18. if (!System.IO.File.Exists(dbPath))
  19. {
  20. SQLiteHelper.CreateDB(dbPath);
  21. //Console.WriteLine("OK");
  22. }
  23. SQLiteHelper db = new SQLiteHelper(dbPath);
  24. string sql = @"CREATE TABLE Patient(
  25. id integer primary key autoincrement not null,
  26. record_id varchar(100),
  27. idNum varchar(20),
  28. name varchar(20),
  29. height float,
  30. weight float,
  31. base_heartrate integer,
  32. pregnancy_times integer,
  33. birth_times integer,
  34. pregnancy_date Date,
  35. mobile varchar(20),
  36. profession varchar(40),
  37. address varchar(140),
  38. category varchar(40),
  39. group_1 varchar(40),
  40. firstLetterPY varchar(10),
  41. description varchar(200),
  42. lastRecordDate datetime,
  43. delete_flag boolean
  44. )";
  45. db.ExecuteNonQuery(sql, null);
  46. string sql_1 = "CREATE INDEX Patient_idNum on Patient(idNum)";
  47. db.ExecuteNonQuery(sql_1, null);
  48. }
  49. //创建记录表
  50. public static void CreateRecordTable()
  51. {
  52. //如果不存在改数据库文件,则创建该数据库文件
  53. if (!System.IO.File.Exists(dbPath))
  54. {
  55. SQLiteHelper.CreateDB(dbPath);
  56. }
  57. SQLiteHelper db = new SQLiteHelper(dbPath);
  58. string sql = @"CREATE TABLE Record(
  59. id integer primary key autoincrement not null ,
  60. patientId integer,
  61. recordTime datetime ,
  62. dataLeft blob,
  63. dataRight blob,
  64. dataWrist blob,
  65. topBP integer,
  66. bottomBP integer,
  67. heartRate integer,
  68. eigenValueSaved integer ,
  69. comments varchar(200)
  70. )";
  71. db.ExecuteNonQuery(sql, null);
  72. }
  73. //创建医生表
  74. public static void CreateDoctorTable()
  75. {
  76. //如果不存在改数据库文件,则创建该数据库文件
  77. if (!System.IO.File.Exists(dbPath))
  78. {
  79. SQLiteHelper.CreateDB(dbPath);
  80. }
  81. SQLiteHelper db = new SQLiteHelper(dbPath);
  82. string sql = @"CREATE TABLE Doctor(
  83. id integer primary key autoincrement not null ,
  84. name varchar(20),
  85. pwd_hash varchar(32),
  86. phone_number varchar(20),
  87. director_flag boolean,
  88. delete_flag boolean)";
  89. db.ExecuteNonQuery(sql, null);
  90. }
  91. //创建CommonWords表
  92. public static void CreateCommonWordsTable()
  93. {
  94. //如果不存在改数据库文件,则创建该数据库文件
  95. if (!System.IO.File.Exists(dbPath))
  96. {
  97. SQLiteHelper.CreateDB(dbPath);
  98. }
  99. SQLiteHelper db = new SQLiteHelper(dbPath);
  100. string sql = @"CREATE TABLE CommonWords(
  101. id integer primary key autoincrement not null ,
  102. content varchar(200),
  103. describe varchar(20))";
  104. db.ExecuteNonQuery(sql, null);
  105. }
  106. //创建表达式表
  107. public static void CreateExpressionTable()
  108. {
  109. //如果不存在改数据库文件,则创建该数据库文件
  110. if (!System.IO.File.Exists(dbPath))
  111. {
  112. SQLiteHelper.CreateDB(dbPath);
  113. }
  114. SQLiteHelper db = new SQLiteHelper(dbPath);
  115. string sql = @"CREATE TABLE Expression(
  116. id integer primary key autoincrement not null ,
  117. expression_content varchar(500),
  118. expression_description varchar(500)
  119. )";
  120. db.ExecuteNonQuery(sql, null);
  121. }
  122. //创建配置表
  123. public static void CreateConfigTable()
  124. {
  125. //如果不存在改数据库文件,则创建该数据库文件
  126. if (!System.IO.File.Exists(dbPath))
  127. {
  128. SQLiteHelper.CreateDB(dbPath);
  129. }
  130. SQLiteHelper db = new SQLiteHelper(dbPath);
  131. string sql = @"CREATE TABLE Config(
  132. key varchar(100) primary key not null ,
  133. value varchar(500)
  134. )";
  135. db.ExecuteNonQuery(sql, null);
  136. }
  137. #endregion
  138. #region 数据库整体操作
  139. /// <summary>
  140. /// optmizeDatabase:从数据库中清空空闲列表
  141. /// </summary>
  142. public static int optmizeDatabase()
  143. {
  144. string sql = "vacuum";
  145. SQLiteHelper db = new SQLiteHelper(dbPath);
  146. SQLiteParameter[] parameters = new SQLiteParameter[] { };
  147. return db.ExecuteNonQuery(sql, parameters);
  148. }
  149. #endregion
  150. #region Patient表各类操作
  151. //Patient表的插入
  152. public static void InsertPatientData(string record_id,string name, string gender, double height, double weight,int pregnancy_times,DateTime birth_date,string phone,string address,string history,string diagnosis, string name_py)
  153. {
  154. string sql = "INSERT INTO Patient(p_record_id,p_name,p_gender,p_height,p_weight,p_pregnancy_time,p_birthdate,p_phone,p_address,p_history,p_diagnosis, p_name_py)"+
  155. "values(@record_id,@name,@gender,@height,@weight,@pregnancy_times,@birthdate,@phone,@address,@history,@diagnosis,@name_py)";
  156. SQLiteHelper db = new SQLiteHelper(dbPath);
  157. SQLiteParameter[] parameters = new SQLiteParameter[]{
  158. new SQLiteParameter("@record_id",record_id),
  159. new SQLiteParameter("@name",name),
  160. new SQLiteParameter("@gender",gender),
  161. new SQLiteParameter("@height",height),
  162. new SQLiteParameter("@weight",weight),
  163. new SQLiteParameter("@pregnancy_times",pregnancy_times),
  164. new SQLiteParameter("@birthdate",birth_date),
  165. new SQLiteParameter("@phone",phone),
  166. new SQLiteParameter("@address",address),
  167. new SQLiteParameter("@history",history),
  168. new SQLiteParameter("@diagnosis",diagnosis),
  169. new SQLiteParameter("@name_py",name_py),
  170. };
  171. db.ExecuteNonQuery(sql, parameters);
  172. }
  173. //Patient表的更新
  174. public static void UpdatePatientData(string id, string record_id, string name, string gender, double height, double weight, int pregnancy_times, DateTime birth_date, string phone, string address, string history, string diagnosis, string name_py)
  175. {
  176. //Boolean a = false;
  177. string sql = "UPDATE Patient SET p_record_id=@record_id,p_name=@name,p_gender=@gender,p_height=@height,p_weight=@weight,p_pregnancy_time=@pregnancy_times,p_birthdate=@birth_date,p_phone=@phone,p_address=@address,p_history=@history,p_diagnosis=@diagnosis,p_name_py=@name_py WHERE p_id=@id";
  178. SQLiteHelper db = new SQLiteHelper(dbPath);
  179. SQLiteParameter[] parameters = new SQLiteParameter[]{
  180. new SQLiteParameter("@record_id",record_id),
  181. new SQLiteParameter("@name",name),
  182. new SQLiteParameter("@gender",gender),
  183. new SQLiteParameter("@height",height),
  184. new SQLiteParameter("@weight",weight),
  185. new SQLiteParameter("@pregnancy_times",pregnancy_times),
  186. new SQLiteParameter("@birth_date",birth_date),
  187. new SQLiteParameter("@phone",phone),
  188. new SQLiteParameter("@address",address),
  189. new SQLiteParameter("@history",history),
  190. new SQLiteParameter("@diagnosis",diagnosis),
  191. new SQLiteParameter("@name_py",name_py),
  192. new SQLiteParameter("@id",id),
  193. };
  194. //System.Console.WriteLine(sql);
  195. db.ExecuteNonQuery(sql, parameters);
  196. }
  197. //Patient表的仅更新最后XX时间的方法
  198. //type 为 filter 或 evaluation
  199. public static void UpdatePatientDataWithLastDate(int id, string type, DateTime lastRecordDate)
  200. {
  201. string colum_select = "p_last_filter_time";
  202. if(type == "evaluation")
  203. colum_select = "p_last_evaluation_time";
  204. string sql = "UPDATE Patient SET " + colum_select + "=@lastRecordDate WHERE p_id=@id";
  205. SQLiteHelper db = new SQLiteHelper(dbPath);
  206. SQLiteParameter[] parameters = new SQLiteParameter[]{
  207. new SQLiteParameter("@lastRecordDate",lastRecordDate),
  208. new SQLiteParameter("@id",id)
  209. };
  210. db.ExecuteNonQuery(sql, parameters);
  211. }
  212. //Patient表记录的删除
  213. public static int DeletePatientItem(string id)
  214. {
  215. string sql = "UPDATE Patient SET p_delete_flag=1 WHERE p_id=@id";
  216. SQLiteHelper db = new SQLiteHelper(dbPath);
  217. SQLiteParameter[] parameters = new SQLiteParameter[]{
  218. new SQLiteParameter("@id",id)
  219. };
  220. return db.ExecuteNonQuery(sql, parameters);
  221. }
  222. /// <summary>
  223. /// getDeletedPatients:从Patient表中获取所有已被标记为删除的数据的id
  224. /// </summary>
  225. public static List<int> getDeletedPatients()
  226. {
  227. string sql = "SELECT p_id FROM Patient WHERE p_delete_flag = 1";
  228. SQLiteHelper db = new SQLiteHelper(dbPath);
  229. SQLiteParameter[] parameters = new SQLiteParameter[] { };
  230. List<int> result = new List<int>();
  231. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  232. {
  233. while (reader.Read())
  234. {
  235. int id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  236. result.Add(id);
  237. }
  238. }
  239. return result;
  240. }
  241. /// <summary>
  242. /// realDeleteRecords:从Patient表中真实删除记录
  243. /// </summary>
  244. public static int realDeleteRecords()
  245. {
  246. string sql = "DELETE from Patient WHERE p_delete_flag=1";
  247. SQLiteHelper db = new SQLiteHelper(dbPath);
  248. SQLiteParameter[] parameters = new SQLiteParameter[]{ };
  249. return db.ExecuteNonQuery(sql, parameters);
  250. }
  251. //检查Patient表是否重复,条件提病例号.重复返回true,否则返回false
  252. public static bool checkRepeatPatient(string record_id)
  253. {
  254. string sql = "SELECT * FROM Patient WHERE p_record_id = @record_id AND p_delete_flag = 0";
  255. SQLiteHelper db = new SQLiteHelper(dbPath);
  256. SQLiteParameter[] parameters = new SQLiteParameter[]{
  257. new SQLiteParameter("@record_id",record_id)
  258. };
  259. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  260. {
  261. while (reader.Read())
  262. {
  263. reader.Close();
  264. return true;
  265. }
  266. }
  267. return false;
  268. }
  269. //通过id主键查找Patient
  270. public static Patient getPatientById(string id)
  271. {
  272. string sql = "SELECT * FROM Patient WHERE p_id = @id AND p_delete_flag = 0 LIMIT 1";
  273. SQLiteHelper db = new SQLiteHelper(dbPath);
  274. SQLiteParameter[] parameters = new SQLiteParameter[]{
  275. new SQLiteParameter("@id",id),
  276. };
  277. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  278. {
  279. while (reader.Read())
  280. {
  281. Patient temp = new Patient();
  282. temp.p_id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  283. temp.p_name = reader.IsDBNull(1) ? "" : reader.GetString(1);
  284. temp.p_name_py = reader.IsDBNull(2) ? "" : reader.GetString(2);
  285. temp.p_record_id = reader.IsDBNull(3) ? "" : reader.GetString(3);
  286. temp.p_gender = reader.IsDBNull(4) ? "" : reader.GetString(4);
  287. temp.p_birthdate = reader.IsDBNull(5) ? DateTime.MinValue : reader.GetDateTime(5);
  288. temp.p_height = reader.IsDBNull(6) ? 0 : reader.GetDouble(6);
  289. temp.p_weight = reader.IsDBNull(7) ? 0 : reader.GetDouble(7);
  290. temp.p_pregnancy_time = reader.IsDBNull(8) ? 0 : reader.GetInt32(8);
  291. temp.p_phone = reader.IsDBNull(9) ? "" : reader.GetString(9);
  292. temp.p_address = reader.IsDBNull(10) ? "" : reader.GetString(10);
  293. temp.p_history = reader.IsDBNull(11) ? "" : reader.GetString(11);
  294. temp.p_diagnosis = reader.IsDBNull(12) ? "" : reader.GetString(12);
  295. temp.doc_id = reader.IsDBNull(13) ? 0 : reader.GetInt32(13);
  296. temp.p_last_filter_time = reader.IsDBNull(14) ? DateTime.MinValue : reader.GetDateTime(14);
  297. temp.p_last_evaluation_time = reader.IsDBNull(15) ? DateTime.MinValue : reader.GetDateTime(15);
  298. temp.p_delete_flag = reader.IsDBNull(16) ? false : reader.GetBoolean(16); ;
  299. return temp;
  300. }
  301. }
  302. return null;
  303. }
  304. #endregion
  305. #region Question_template表的相关操作
  306. public static List<Question> getQuestions(string type = "filter")
  307. {
  308. List<Question> questions = new List<Question>();
  309. string condition = "q_type = 1";
  310. if(type == "evaluation")
  311. {
  312. condition = "q_type = 2";
  313. }
  314. string sql = "SELECT * FROM Question_template WHERE " + condition + " order by q_number asc";
  315. SQLiteHelper db = new SQLiteHelper(dbPath);
  316. SQLiteParameter[] parameters = new SQLiteParameter[]{};
  317. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  318. {
  319. while (reader.Read())
  320. {
  321. Question temp = new Question();
  322. temp.q_id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  323. temp.q_type = reader.IsDBNull(1) ? 0 : reader.GetInt32(1);
  324. temp.q_number = reader.IsDBNull(2) ? 0 : reader.GetInt32(2);
  325. temp.q_title = reader.IsDBNull(3) ? "" : reader.GetString(3);
  326. temp.q_content = reader.IsDBNull(4) ? "" : reader.GetString(4);
  327. temp.prior_a_id = reader.IsDBNull(5) ? 0 : reader.GetInt32(5);
  328. questions.Add(temp);
  329. }
  330. }
  331. return questions;
  332. }
  333. public static Question getQuestionById(int qid)
  334. {
  335. string sql = "SELECT * FROM Question_template WHERE q_id=@qid LIMIT 1";
  336. SQLiteHelper db = new SQLiteHelper(dbPath);
  337. SQLiteParameter[] parameters = new SQLiteParameter[]{
  338. new SQLiteParameter("@qid",qid),
  339. };
  340. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  341. {
  342. while (reader.Read())
  343. {
  344. Question temp = new Question();
  345. temp.q_id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  346. temp.q_type = reader.IsDBNull(1) ? 0 : reader.GetInt32(1);
  347. temp.q_number = reader.IsDBNull(2) ? 0 : reader.GetInt32(2);
  348. temp.q_title = reader.IsDBNull(3) ? "" : reader.GetString(3);
  349. temp.q_content = reader.IsDBNull(4) ? "" : reader.GetString(4);
  350. temp.prior_a_id = reader.IsDBNull(5) ? 0 : reader.GetInt32(5);
  351. return temp;
  352. }
  353. }
  354. return null;
  355. }
  356. #endregion
  357. #region Answer_template表相关操作
  358. public static List<Answer> getAnswersByQid(int qid)
  359. {
  360. List<Answer> questions = new List<Answer>();
  361. string sql = "SELECT * FROM Answer_template WHERE q_id=@qid order by a_id asc";
  362. SQLiteHelper db = new SQLiteHelper(dbPath);
  363. SQLiteParameter[] parameters = new SQLiteParameter[]{
  364. new SQLiteParameter("@qid",qid),
  365. };
  366. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  367. {
  368. while (reader.Read())
  369. {
  370. Answer temp = new Answer();
  371. temp.a_id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  372. temp.q_id = reader.IsDBNull(1) ? 0 : reader.GetInt32(1);
  373. temp.a_content = reader.IsDBNull(2) ? "" : reader.GetString(2);
  374. temp.a_value = reader.IsDBNull(3) ? 0 : reader.GetInt32(3);
  375. temp.next_q_id = reader.IsDBNull(4) ? 0 : reader.GetInt32(4);
  376. temp.a_description_text = reader.IsDBNull(5) ? "" : reader.GetString(5);
  377. temp.a_description_img = reader.IsDBNull(6) ? "" : reader.GetString(6);
  378. temp.a_suggestion_text = reader.IsDBNull(7) ? "" : reader.GetString(7);
  379. temp.a_suggestion_img = reader.IsDBNull(8) ? "" : reader.GetString(8);
  380. questions.Add(temp);
  381. }
  382. }
  383. return questions;
  384. }
  385. public static Answer getAnswerById(int aid)
  386. {
  387. string sql = "SELECT * FROM Answer_template WHERE a_id=@aid LIMIT 1";
  388. SQLiteHelper db = new SQLiteHelper(dbPath);
  389. SQLiteParameter[] parameters = new SQLiteParameter[]{
  390. new SQLiteParameter("@aid",aid),
  391. };
  392. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  393. {
  394. while (reader.Read())
  395. {
  396. Answer temp = new Answer();
  397. temp.a_id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  398. temp.q_id = reader.IsDBNull(1) ? 0 : reader.GetInt32(1);
  399. temp.a_content = reader.IsDBNull(2) ? "" : reader.GetString(2);
  400. temp.a_value = reader.IsDBNull(3) ? 0 : reader.GetInt32(3);
  401. temp.next_q_id = reader.IsDBNull(4) ? 0 : reader.GetInt32(4);
  402. temp.a_description_text = reader.IsDBNull(5) ? "" : reader.GetString(5);
  403. temp.a_description_img = reader.IsDBNull(6) ? "" : reader.GetString(6);
  404. temp.a_suggestion_text = reader.IsDBNull(7) ? "" : reader.GetString(7);
  405. temp.a_suggestion_img = reader.IsDBNull(8) ? "" : reader.GetString(8);
  406. return temp;
  407. }
  408. }
  409. return null;
  410. }
  411. #endregion
  412. #region Record表相关操作
  413. /// <summary>
  414. /// 插入报告一份,并返回报告的ID
  415. /// </summary>
  416. /// <param name="r_type">1-筛查,2-评估</param>
  417. /// <param name="p_id">病例ID</param>
  418. /// <param name="d_id">医生ID</param>
  419. /// <param name="filter_id">如是评估报告,那么其遵顼的筛查记录ID</param>
  420. /// <param name="r_time">报告时间</param>
  421. /// <param name="r_count">报告计数</param>
  422. /// <param name="r_selection">报告内容</param>
  423. public static int insertRecord(int r_type, int p_id, int d_id, int filter_id, DateTime r_time, int r_count, string r_selection)
  424. {
  425. string sql = "INSERT INTO Record(r_type,p_id,d_id,filter_id,r_time,r_count,r_selection)" +
  426. "values(@r_type,@p_id,@d_id,@filter_id,@r_time,@r_count,@r_selection)";
  427. SQLiteHelper db = new SQLiteHelper(dbPath);
  428. SQLiteParameter[] parameters = new SQLiteParameter[]{
  429. new SQLiteParameter("@r_type",r_type),
  430. new SQLiteParameter("@p_id",p_id),
  431. new SQLiteParameter("@d_id",d_id),
  432. new SQLiteParameter("@filter_id",filter_id),
  433. new SQLiteParameter("@r_time",r_time),
  434. new SQLiteParameter("@r_count",r_count),
  435. new SQLiteParameter("@r_selection",r_selection)
  436. };
  437. db.ExecuteNonQuery(sql, parameters);
  438. //返回所插入的r_id
  439. sql = "SELECT MAX(r_id) FROM Record;";
  440. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  441. {
  442. while (reader.Read())
  443. {
  444. int max_id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  445. return max_id;
  446. }
  447. }
  448. return 0;
  449. }
  450. /// <summary>
  451. /// 根据ID返回一份报告记录
  452. /// </summary>
  453. /// <param name="r_id">记录ID</param>
  454. public static Record getRecordByID(int r_id)
  455. {
  456. string sql = "SELECT * FROM Record WHERE r_id=@r_id LIMIT 1";
  457. SQLiteHelper db = new SQLiteHelper(dbPath);
  458. SQLiteParameter[] parameters = new SQLiteParameter[]{
  459. new SQLiteParameter("@r_id",r_id),
  460. };
  461. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  462. {
  463. while (reader.Read())
  464. {
  465. Record temp = new Record();
  466. temp.r_id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  467. temp.r_type = reader.IsDBNull(1) ? 0 : reader.GetInt32(1);
  468. temp.p_id = reader.IsDBNull(2) ? 0 : reader.GetInt32(2);
  469. temp.d_id = reader.IsDBNull(3) ? 0 : reader.GetInt32(3);
  470. temp.filter_id = reader.IsDBNull(4) ? 0 : reader.GetInt32(4);
  471. temp.r_time = reader.IsDBNull(5) ? DateTime.MinValue : reader.GetDateTime(5);
  472. temp.r_count = reader.IsDBNull(6) ? 0 : reader.GetInt32(6);
  473. temp.r_selection = reader.IsDBNull(7) ? "" : reader.GetString(7);
  474. return temp;
  475. }
  476. }
  477. return null;
  478. }
  479. /// <summary>
  480. /// 根据ID返回一份报告记录
  481. /// </summary>
  482. /// <param name="r_id">记录ID</param>
  483. public static List<Record> getRecordsByPid(int p_id)
  484. {
  485. string sql = "SELECT * FROM Record WHERE p_id=@p_id";
  486. SQLiteHelper db = new SQLiteHelper(dbPath);
  487. SQLiteParameter[] parameters = new SQLiteParameter[]{
  488. new SQLiteParameter("@p_id",p_id),
  489. };
  490. List<Record> results = new List<Record>();
  491. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  492. {
  493. while (reader.Read())
  494. {
  495. Record temp = new Record();
  496. temp.r_id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  497. temp.r_type = reader.IsDBNull(1) ? 0 : reader.GetInt32(1);
  498. if (temp.r_type == 2)
  499. temp.r_type_d = "评估报告";
  500. else
  501. temp.r_type_d = "筛查报告";
  502. temp.p_id = reader.IsDBNull(2) ? 0 : reader.GetInt32(2);
  503. temp.d_id = reader.IsDBNull(3) ? 0 : reader.GetInt32(3);
  504. temp.filter_id = reader.IsDBNull(4) ? 0 : reader.GetInt32(4);
  505. temp.r_time = reader.IsDBNull(5) ? DateTime.MinValue : reader.GetDateTime(5);
  506. temp.r_count = reader.IsDBNull(6) ? 0 : reader.GetInt32(6);
  507. temp.r_selection = reader.IsDBNull(7) ? "" : reader.GetString(7);
  508. results.Add(temp);
  509. }
  510. }
  511. return results;
  512. }
  513. /// <summary>
  514. /// 选取近days里某一病例的type类报告一份
  515. /// </summary>
  516. /// <param name="p_id">病例ID</param>
  517. /// <param name="r_type">1-筛查,2-评估</param>
  518. /// <param name="days">前多少天内有效</param>
  519. public static Record getLatestXTypeRecordInYDays(int p_id, int r_type, int days)
  520. {
  521. DateTime dt = DateTime.Now;
  522. string sql = "SELECT * FROM Record WHERE p_id=@p_id and r_time >=@r_time and r_type=@r_type LIMIT 1";
  523. SQLiteHelper db = new SQLiteHelper(dbPath);
  524. SQLiteParameter[] parameters = new SQLiteParameter[]{
  525. new SQLiteParameter("@p_id",p_id),
  526. new SQLiteParameter("@r_type",r_type),
  527. new SQLiteParameter("@r_time",dt.AddDays(-days)),
  528. };
  529. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  530. {
  531. while (reader.Read())
  532. {
  533. Record temp = new Record();
  534. temp.r_id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  535. temp.r_type = reader.IsDBNull(1) ? 0 : reader.GetInt32(1);
  536. temp.p_id = reader.IsDBNull(2) ? 0 : reader.GetInt32(2);
  537. temp.d_id = reader.IsDBNull(3) ? 0 : reader.GetInt32(3);
  538. temp.filter_id = reader.IsDBNull(4) ? 0 : reader.GetInt32(4);
  539. temp.r_time =reader.IsDBNull(5) ? DateTime.MinValue : reader.GetDateTime(5);
  540. temp.r_count = reader.IsDBNull(6) ? 0 : reader.GetInt32(6);
  541. temp.r_selection = reader.IsDBNull(7) ? "" : reader.GetString(7);
  542. return temp;
  543. }
  544. }
  545. return null;
  546. }
  547. /// <summary>
  548. /// 将r_id对应的记录生成计数+1
  549. /// </summary>
  550. /// <param name="r_id">记录ID</param>
  551. public static int plusOneCountOnRecordByRid(int r_id)
  552. {
  553. string sql = "UPDATE Record SET r_count=r_count+1 WHERE r_id=@r_id";
  554. SQLiteHelper db = new SQLiteHelper(dbPath);
  555. SQLiteParameter[] parameters = new SQLiteParameter[]{
  556. new SQLiteParameter("@r_id",r_id)
  557. };
  558. return db.ExecuteNonQuery(sql, parameters);
  559. }
  560. /// <summary>
  561. /// 删除病例pid对应的所有记录
  562. /// </summary>
  563. /// <param name="r_id">记录ID</param>
  564. public static int deleteRecordByPid(int p_id)
  565. {
  566. string sql = "DELETE FROM Record WHERE p_id=@p_id";
  567. SQLiteHelper db = new SQLiteHelper(dbPath);
  568. SQLiteParameter[] parameters = new SQLiteParameter[]{
  569. new SQLiteParameter("@p_id",p_id)
  570. };
  571. return db.ExecuteNonQuery(sql, parameters);
  572. }
  573. #endregion
  574. #region doctor表相关的操作
  575. //医生登录操作
  576. public static doctor doctorLogin(string name,string passwordHash)
  577. {
  578. string sql = "SELECT * FROM Doctor WHERE name = @name and pwd_hash=@passwordHash and delete_flag =0 LIMIT 1";
  579. SQLiteHelper db = new SQLiteHelper(dbPath);
  580. SQLiteParameter[] parameters = new SQLiteParameter[]{
  581. new SQLiteParameter("@name",name),
  582. new SQLiteParameter("@passwordHash",passwordHash),
  583. };
  584. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  585. {
  586. while (reader.Read())
  587. {
  588. doctor oneDoctor = new doctor();
  589. oneDoctor.id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  590. oneDoctor.name = name;
  591. oneDoctor.phone_number = reader.IsDBNull(3) ? "" : reader.GetString(3);
  592. oneDoctor.director_flag = reader.IsDBNull(4) ? 0 : reader.GetInt32(4);
  593. oneDoctor.privilege_flag = reader.IsDBNull(6) ? -1 : reader.GetInt32(6);
  594. return oneDoctor;
  595. }
  596. }
  597. return null;
  598. }
  599. //主任登录操作
  600. public static doctor directorLogin(string name, string passwordHash)
  601. {
  602. string sql = "SELECT * FROM Doctor WHERE name = @name and pwd_hash=@passwordHash and delete_flag = 0 and director_flag = 1 LIMIT 1";
  603. SQLiteHelper db = new SQLiteHelper(dbPath);
  604. SQLiteParameter[] parameters = new SQLiteParameter[]{
  605. new SQLiteParameter("@name",name),
  606. new SQLiteParameter("@passwordHash",passwordHash),
  607. };
  608. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  609. {
  610. while (reader.Read())
  611. {
  612. doctor oneDoctor = new doctor();
  613. oneDoctor.id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  614. oneDoctor.name = name;
  615. oneDoctor.phone_number = reader.IsDBNull(3) ? "" : reader.GetString(3);
  616. oneDoctor.director_flag = reader.IsDBNull(4) ? 0 : reader.GetInt32(4);
  617. return oneDoctor;
  618. }
  619. }
  620. return null;
  621. }
  622. //厂商登录操作
  623. public static doctor OEMLogin(string name, string passwordHash)
  624. {
  625. string sql = "SELECT * FROM Doctor WHERE name = @name and pwd_hash=@passwordHash and delete_flag = 0 and privilege_flag = 1 LIMIT 1";
  626. SQLiteHelper db = new SQLiteHelper(dbPath);
  627. SQLiteParameter[] parameters = new SQLiteParameter[]{
  628. new SQLiteParameter("@name",name),
  629. new SQLiteParameter("@passwordHash",passwordHash),
  630. };
  631. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  632. {
  633. while (reader.Read())
  634. {
  635. doctor oneDoctor = new doctor();
  636. oneDoctor.id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  637. oneDoctor.name = name;
  638. oneDoctor.phone_number = reader.IsDBNull(3) ? "" : reader.GetString(3);
  639. oneDoctor.director_flag = reader.IsDBNull(4) ? 0 : reader.GetInt32(4);
  640. return oneDoctor;
  641. }
  642. }
  643. return null;
  644. }
  645. //查询医生用户名是否存在 存在返回true
  646. public static bool checkRepeatDoctor(string name)
  647. {
  648. string sql = "SELECT * FROM Doctor WHERE name = @name AND delete_flag = 0";
  649. SQLiteHelper db = new SQLiteHelper(dbPath);
  650. SQLiteParameter[] parameters = new SQLiteParameter[]{
  651. new SQLiteParameter("@name",name)
  652. };
  653. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  654. {
  655. while (reader.Read())
  656. {
  657. reader.Close();
  658. return true;
  659. }
  660. }
  661. return false;
  662. }
  663. //通过id主键查找Doctor
  664. public static doctor getDoctorById(string id)
  665. {
  666. string sql = "SELECT * FROM Doctor WHERE id = @id AND delete_flag = 0 LIMIT 1";
  667. SQLiteHelper db = new SQLiteHelper(dbPath);
  668. SQLiteParameter[] parameters = new SQLiteParameter[]{
  669. new SQLiteParameter("@id",id),
  670. };
  671. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  672. {
  673. while (reader.Read())
  674. {
  675. doctor temp = new doctor();
  676. temp.id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  677. temp.name = reader.IsDBNull(1) ? "" : reader.GetString(1);
  678. temp.pwd_hash = reader.IsDBNull(2) ? "" : reader.GetString(2);
  679. temp.phone_number = reader.IsDBNull(3) ? "" : reader.GetString(3);
  680. temp.director_flag = reader.IsDBNull(4) ? 0 : reader.GetInt32(4);
  681. return temp;
  682. }
  683. }
  684. return null;
  685. }
  686. //查找Doctor 返回目前还使用的医生id
  687. public static int getDoctorIdByNoDelete()
  688. {
  689. string sql = "SELECT * FROM Doctor WHERE delete_flag = 0 LIMIT 1";
  690. SQLiteHelper db = new SQLiteHelper(dbPath);
  691. SQLiteParameter[] parameters = new SQLiteParameter[]{};
  692. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  693. {
  694. while (reader.Read())
  695. {
  696. doctor temp = new doctor();
  697. temp.id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  698. temp.name = reader.IsDBNull(1) ? "" : reader.GetString(1);
  699. temp.pwd_hash = reader.IsDBNull(2) ? "" : reader.GetString(2);
  700. temp.phone_number = reader.IsDBNull(3) ? "" : reader.GetString(3);
  701. temp.director_flag = reader.IsDBNull(4) ? 0 : reader.GetInt32(4);
  702. return temp.id;
  703. }
  704. }
  705. return -1;
  706. }
  707. //Doctort表的插入
  708. public static void InsertDoctorData(string name, string pwd_hash, string phone_number, Boolean director_flag = false, Boolean delete_flag = false)
  709. {
  710. string sql = "INSERT INTO Doctor(name,pwd_hash,phone_number,director_flag,delete_flag)values(@name,@pwd_hash,@phone_number,@director_flag,@delete_flag)";
  711. SQLiteHelper db = new SQLiteHelper(dbPath);
  712. SQLiteParameter[] parameters = new SQLiteParameter[]{
  713. new SQLiteParameter("@name",name),
  714. new SQLiteParameter("@pwd_hash",pwd_hash),
  715. new SQLiteParameter("@phone_number",phone_number),
  716. new SQLiteParameter("@director_flag",director_flag),
  717. new SQLiteParameter("@delete_flag",delete_flag)
  718. };
  719. db.ExecuteNonQuery(sql, parameters);
  720. }
  721. //Doctor表的更新
  722. public static void UpdateDoctorData(string id, string name, string pwd_hash, string phone_number, Boolean director_flag = false, Boolean delete_flag = false)
  723. {
  724. //Boolean a = false;
  725. string sql = "UPDATE Doctor SET name=@name,pwd_hash=@pwd_hash,phone_number=@phone_number,director_flag=@director_flag,delete_flag=@delete_flag WHERE id=@id";
  726. SQLiteHelper db = new SQLiteHelper(dbPath);
  727. SQLiteParameter[] parameters = new SQLiteParameter[]{
  728. new SQLiteParameter("@name",name),
  729. new SQLiteParameter("@pwd_hash",pwd_hash),
  730. new SQLiteParameter("@phone_number",phone_number),
  731. new SQLiteParameter("@director_flag",director_flag),
  732. new SQLiteParameter("@delete_flag",delete_flag),
  733. new SQLiteParameter("@id",id)
  734. };
  735. db.ExecuteNonQuery(sql, parameters);
  736. }
  737. //Doctor表记录的删除
  738. public static int DeleteDoctorItem(string id)
  739. {
  740. string sql = "UPDATE Doctor SET delete_flag=1 WHERE id=@id";
  741. SQLiteHelper db = new SQLiteHelper(dbPath);
  742. SQLiteParameter[] parameters = new SQLiteParameter[]{
  743. new SQLiteParameter("@id",id)
  744. };
  745. return db.ExecuteNonQuery(sql, parameters);
  746. }
  747. #endregion
  748. #region 配置表Config的相关操作
  749. //查找所有的expression的content列
  750. public static void GetAllConfigContent(Dictionary<string, string> target)
  751. {
  752. target.Clear();
  753. string sql = "SELECT key,value FROM Config WHERE 1";
  754. SQLiteHelper db = new SQLiteHelper(dbPath);
  755. SQLiteParameter[] parameters = new SQLiteParameter[]{
  756. };
  757. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  758. {
  759. while (reader.Read())
  760. {
  761. string tempKey = reader.IsDBNull(0) ? "" : reader.GetString(0);
  762. string tempValue = reader.IsDBNull(1) ? "" : reader.GetString(1);
  763. if (tempKey == "")
  764. {
  765. break;
  766. }
  767. //KeyValuePair<string, double> temp = new KeyValuePair<string, double>(tempKey,0);
  768. target.Add(tempKey, tempValue);
  769. }
  770. }
  771. }
  772. //更新激活码信息
  773. public static void UpdateOrganizationName(string name)
  774. {
  775. //Boolean a = false;
  776. string sql = "UPDATE Config SET value=@name WHERE key='organization_name'";
  777. SQLiteHelper db = new SQLiteHelper(dbPath);
  778. SQLiteParameter[] parameters = new SQLiteParameter[]{
  779. new SQLiteParameter("@name",name)
  780. };
  781. db.ExecuteNonQuery(sql, parameters);
  782. }
  783. #endregion
  784. #region 以下是测试功能,请在生产环境之前删除这些功能
  785. public static byte[] getRecordData()
  786. {
  787. string dbPathTest = @"D:\\sourceCode\\github\\Junde_New\bin\\Debug\\data\\data.db";
  788. string sql = "SELECT Data FROM Record WHERE id = 22";
  789. SQLiteHelper db = new SQLiteHelper(dbPathTest);
  790. Console.WriteLine("database ok!");
  791. using (SQLiteDataReader reader = db.ExecuteReader(sql, null))
  792. {
  793. byte[] buffer = null;
  794. if (reader.HasRows)
  795. {
  796. reader.Read();
  797. long len = reader.GetBytes(reader.GetOrdinal("Data"), 0, null, 0, 0);
  798. Console.WriteLine("len is :" + len.ToString());
  799. buffer = new byte[len];
  800. len = reader.GetBytes(reader.GetOrdinal("Data"), 0, buffer, 0, (int)len);
  801. for(int i =0;i<100;i++)
  802. {
  803. Console.WriteLine(buffer[i]);
  804. }
  805. return buffer;
  806. //System.IO.MemoryStream ms = new System.IO.MemoryStream(buffer);
  807. //System.Drawing.Image iamge = System.Drawing.Image.FromStream(ms);
  808. //pictureBox1.Image = iamge;
  809. }
  810. }
  811. return null;
  812. }
  813. #endregion
  814. }
  815. }