SQLiteModel.cs 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881
  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.a_pain = reader.IsDBNull(4) ? 0 : reader.GetInt32(4);
  376. temp.next_q_id = reader.IsDBNull(5) ? 0 : reader.GetInt32(5);
  377. temp.a_description_text = reader.IsDBNull(6) ? "" : reader.GetString(6);
  378. temp.a_description_img = reader.IsDBNull(7) ? "" : reader.GetString(7);
  379. temp.a_suggestion_text = reader.IsDBNull(8) ? "" : reader.GetString(8);
  380. temp.a_suggestion_img = reader.IsDBNull(9) ? "" : reader.GetString(9);
  381. questions.Add(temp);
  382. }
  383. }
  384. return questions;
  385. }
  386. public static Answer getAnswerById(int aid)
  387. {
  388. string sql = "SELECT * FROM Answer_template WHERE a_id=@aid LIMIT 1";
  389. SQLiteHelper db = new SQLiteHelper(dbPath);
  390. SQLiteParameter[] parameters = new SQLiteParameter[]{
  391. new SQLiteParameter("@aid",aid),
  392. };
  393. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  394. {
  395. while (reader.Read())
  396. {
  397. Answer temp = new Answer();
  398. temp.a_id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  399. temp.q_id = reader.IsDBNull(1) ? 0 : reader.GetInt32(1);
  400. temp.a_content = reader.IsDBNull(2) ? "" : reader.GetString(2);
  401. temp.a_value = reader.IsDBNull(3) ? 0 : reader.GetInt32(3);
  402. temp.a_pain = reader.IsDBNull(4) ? 0 : reader.GetInt32(4);
  403. temp.next_q_id = reader.IsDBNull(5) ? 0 : reader.GetInt32(5);
  404. temp.a_description_text = reader.IsDBNull(6) ? "" : reader.GetString(6);
  405. temp.a_description_img = reader.IsDBNull(7) ? "" : reader.GetString(7);
  406. temp.a_suggestion_text = reader.IsDBNull(8) ? "" : reader.GetString(8);
  407. temp.a_suggestion_img = reader.IsDBNull(9) ? "" : reader.GetString(9);
  408. return temp;
  409. }
  410. }
  411. return null;
  412. }
  413. public static int loopInsertAnswers()
  414. {
  415. int start_a_id = 182;
  416. for(int i = 1; i <= 6; ++i)
  417. {
  418. int new_i = 9 + (i - 1) * 3;
  419. for(int j = 1; j <= 10; ++j)
  420. {
  421. string sql = "INSERT INTO Answer_template(a_id,q_id,a_content,a_value,a_description_text)" +
  422. "values(@a_id,@q_id,@a_content,@a_value,@a_description_text)";
  423. SQLiteHelper db = new SQLiteHelper(dbPath);
  424. SQLiteParameter[] parameters = new SQLiteParameter[]{
  425. new SQLiteParameter("@a_id",start_a_id),
  426. new SQLiteParameter("@q_id",new_i),
  427. new SQLiteParameter("@a_content","疼痛:"+j+"分"),
  428. new SQLiteParameter("@a_value",2.ToString()),
  429. //new SQLiteParameter("@next_q_id",),
  430. new SQLiteParameter("@a_description_text",(27+(i-1)*6).ToString()+".pdf")
  431. };
  432. db.ExecuteNonQuery(sql, parameters);
  433. ++start_a_id;
  434. }
  435. }
  436. return 0;
  437. }
  438. #endregion
  439. #region Record表相关操作
  440. /// <summary>
  441. /// 插入报告一份,并返回报告的ID
  442. /// </summary>
  443. /// <param name="r_type">1-筛查,2-评估</param>
  444. /// <param name="p_id">病例ID</param>
  445. /// <param name="d_id">医生ID</param>
  446. /// <param name="filter_id">如是评估报告,那么其遵顼的筛查记录ID</param>
  447. /// <param name="r_time">报告时间</param>
  448. /// <param name="r_count">报告计数</param>
  449. /// <param name="r_selection">报告内容</param>
  450. 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)
  451. {
  452. string sql = "INSERT INTO Record(r_type,p_id,d_id,filter_id,r_time,r_count,r_selection)" +
  453. "values(@r_type,@p_id,@d_id,@filter_id,@r_time,@r_count,@r_selection)";
  454. SQLiteHelper db = new SQLiteHelper(dbPath);
  455. SQLiteParameter[] parameters = new SQLiteParameter[]{
  456. new SQLiteParameter("@r_type",r_type),
  457. new SQLiteParameter("@p_id",p_id),
  458. new SQLiteParameter("@d_id",d_id),
  459. new SQLiteParameter("@filter_id",filter_id),
  460. new SQLiteParameter("@r_time",r_time),
  461. new SQLiteParameter("@r_count",r_count),
  462. new SQLiteParameter("@r_selection",r_selection)
  463. };
  464. db.ExecuteNonQuery(sql, parameters);
  465. //返回所插入的r_id
  466. sql = "SELECT MAX(r_id) FROM Record;";
  467. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  468. {
  469. while (reader.Read())
  470. {
  471. int max_id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  472. return max_id;
  473. }
  474. }
  475. return 0;
  476. }
  477. /// <summary>
  478. /// 根据ID返回一份报告记录
  479. /// </summary>
  480. /// <param name="r_id">记录ID</param>
  481. public static Record getRecordByID(int r_id)
  482. {
  483. string sql = "SELECT * FROM Record WHERE r_id=@r_id LIMIT 1";
  484. SQLiteHelper db = new SQLiteHelper(dbPath);
  485. SQLiteParameter[] parameters = new SQLiteParameter[]{
  486. new SQLiteParameter("@r_id",r_id),
  487. };
  488. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  489. {
  490. while (reader.Read())
  491. {
  492. Record temp = new Record();
  493. temp.r_id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  494. temp.r_type = reader.IsDBNull(1) ? 0 : reader.GetInt32(1);
  495. temp.p_id = reader.IsDBNull(2) ? 0 : reader.GetInt32(2);
  496. temp.d_id = reader.IsDBNull(3) ? 0 : reader.GetInt32(3);
  497. temp.filter_id = reader.IsDBNull(4) ? 0 : reader.GetInt32(4);
  498. temp.r_time = reader.IsDBNull(5) ? DateTime.MinValue : reader.GetDateTime(5);
  499. temp.r_count = reader.IsDBNull(6) ? 0 : reader.GetInt32(6);
  500. temp.r_selection = reader.IsDBNull(7) ? "" : reader.GetString(7);
  501. return temp;
  502. }
  503. }
  504. return null;
  505. }
  506. /// <summary>
  507. /// 根据ID返回一份报告记录
  508. /// </summary>
  509. /// <param name="r_id">记录ID</param>
  510. public static List<Record> getRecordsByPid(int p_id)
  511. {
  512. string sql = "SELECT * FROM Record WHERE p_id=@p_id order by r_time desc";
  513. SQLiteHelper db = new SQLiteHelper(dbPath);
  514. SQLiteParameter[] parameters = new SQLiteParameter[]{
  515. new SQLiteParameter("@p_id",p_id),
  516. };
  517. List<Record> results = new List<Record>();
  518. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  519. {
  520. while (reader.Read())
  521. {
  522. Record temp = new Record();
  523. temp.r_id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  524. temp.r_type = reader.IsDBNull(1) ? 0 : reader.GetInt32(1);
  525. if (temp.r_type == 2)
  526. temp.r_type_d = "评估报告";
  527. else
  528. temp.r_type_d = "筛查报告";
  529. temp.p_id = reader.IsDBNull(2) ? 0 : reader.GetInt32(2);
  530. temp.d_id = reader.IsDBNull(3) ? 0 : reader.GetInt32(3);
  531. temp.filter_id = reader.IsDBNull(4) ? 0 : reader.GetInt32(4);
  532. temp.r_time = reader.IsDBNull(5) ? DateTime.MinValue : reader.GetDateTime(5);
  533. temp.r_count = reader.IsDBNull(6) ? 0 : reader.GetInt32(6);
  534. temp.r_selection = reader.IsDBNull(7) ? "" : reader.GetString(7);
  535. results.Add(temp);
  536. }
  537. }
  538. return results;
  539. }
  540. /// <summary>
  541. /// 选取近days里某一病例的type类报告一份
  542. /// </summary>
  543. /// <param name="p_id">病例ID</param>
  544. /// <param name="r_type">1-筛查,2-评估</param>
  545. /// <param name="days">前多少天内有效</param>
  546. public static Record getLatestXTypeRecordInYDays(int p_id, int r_type, int days)
  547. {
  548. DateTime dt = DateTime.Now;
  549. string sql = "SELECT * FROM Record WHERE p_id=@p_id and r_time >=@r_time and r_type=@r_type ORDER BY r_time desc LIMIT 1";
  550. SQLiteHelper db = new SQLiteHelper(dbPath);
  551. SQLiteParameter[] parameters = new SQLiteParameter[]{
  552. new SQLiteParameter("@p_id",p_id),
  553. new SQLiteParameter("@r_type",r_type),
  554. new SQLiteParameter("@r_time",dt.AddDays(-days)),
  555. };
  556. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  557. {
  558. while (reader.Read())
  559. {
  560. Record temp = new Record();
  561. temp.r_id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  562. temp.r_type = reader.IsDBNull(1) ? 0 : reader.GetInt32(1);
  563. temp.p_id = reader.IsDBNull(2) ? 0 : reader.GetInt32(2);
  564. temp.d_id = reader.IsDBNull(3) ? 0 : reader.GetInt32(3);
  565. temp.filter_id = reader.IsDBNull(4) ? 0 : reader.GetInt32(4);
  566. temp.r_time =reader.IsDBNull(5) ? DateTime.MinValue : reader.GetDateTime(5);
  567. temp.r_count = reader.IsDBNull(6) ? 0 : reader.GetInt32(6);
  568. temp.r_selection = reader.IsDBNull(7) ? "" : reader.GetString(7);
  569. return temp;
  570. }
  571. }
  572. return null;
  573. }
  574. /// <summary>
  575. /// 将r_id对应的记录生成计数+1
  576. /// </summary>
  577. /// <param name="r_id">记录ID</param>
  578. public static int plusOneCountOnRecordByRid(int r_id)
  579. {
  580. string sql = "UPDATE Record SET r_count=r_count+1 WHERE r_id=@r_id";
  581. SQLiteHelper db = new SQLiteHelper(dbPath);
  582. SQLiteParameter[] parameters = new SQLiteParameter[]{
  583. new SQLiteParameter("@r_id",r_id)
  584. };
  585. return db.ExecuteNonQuery(sql, parameters);
  586. }
  587. /// <summary>
  588. /// 删除病例pid对应的所有记录
  589. /// </summary>
  590. /// <param name="r_id">记录ID</param>
  591. public static int deleteRecordByPid(int p_id)
  592. {
  593. string sql = "DELETE FROM Record WHERE p_id=@p_id";
  594. SQLiteHelper db = new SQLiteHelper(dbPath);
  595. SQLiteParameter[] parameters = new SQLiteParameter[]{
  596. new SQLiteParameter("@p_id",p_id)
  597. };
  598. return db.ExecuteNonQuery(sql, parameters);
  599. }
  600. #endregion
  601. #region doctor表相关的操作
  602. //医生登录操作
  603. public static doctor doctorLogin(string name,string passwordHash)
  604. {
  605. string sql = "SELECT * FROM Doctor WHERE name = @name and pwd_hash=@passwordHash and delete_flag =0 LIMIT 1";
  606. SQLiteHelper db = new SQLiteHelper(dbPath);
  607. SQLiteParameter[] parameters = new SQLiteParameter[]{
  608. new SQLiteParameter("@name",name),
  609. new SQLiteParameter("@passwordHash",passwordHash),
  610. };
  611. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  612. {
  613. while (reader.Read())
  614. {
  615. doctor oneDoctor = new doctor();
  616. oneDoctor.id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  617. oneDoctor.name = name;
  618. oneDoctor.phone_number = reader.IsDBNull(3) ? "" : reader.GetString(3);
  619. oneDoctor.director_flag = reader.IsDBNull(4) ? 0 : reader.GetInt32(4);
  620. oneDoctor.privilege_flag = reader.IsDBNull(6) ? -1 : reader.GetInt32(6);
  621. return oneDoctor;
  622. }
  623. }
  624. return null;
  625. }
  626. //主任登录操作
  627. public static doctor directorLogin(string name, string passwordHash)
  628. {
  629. string sql = "SELECT * FROM Doctor WHERE name = @name and pwd_hash=@passwordHash and delete_flag = 0 and director_flag = 1 LIMIT 1";
  630. SQLiteHelper db = new SQLiteHelper(dbPath);
  631. SQLiteParameter[] parameters = new SQLiteParameter[]{
  632. new SQLiteParameter("@name",name),
  633. new SQLiteParameter("@passwordHash",passwordHash),
  634. };
  635. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  636. {
  637. while (reader.Read())
  638. {
  639. doctor oneDoctor = new doctor();
  640. oneDoctor.id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  641. oneDoctor.name = name;
  642. oneDoctor.phone_number = reader.IsDBNull(3) ? "" : reader.GetString(3);
  643. oneDoctor.director_flag = reader.IsDBNull(4) ? 0 : reader.GetInt32(4);
  644. return oneDoctor;
  645. }
  646. }
  647. return null;
  648. }
  649. //厂商登录操作
  650. public static doctor OEMLogin(string name, string passwordHash)
  651. {
  652. string sql = "SELECT * FROM Doctor WHERE name = @name and pwd_hash=@passwordHash and delete_flag = 0 and privilege_flag = 1 LIMIT 1";
  653. SQLiteHelper db = new SQLiteHelper(dbPath);
  654. SQLiteParameter[] parameters = new SQLiteParameter[]{
  655. new SQLiteParameter("@name",name),
  656. new SQLiteParameter("@passwordHash",passwordHash),
  657. };
  658. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  659. {
  660. while (reader.Read())
  661. {
  662. doctor oneDoctor = new doctor();
  663. oneDoctor.id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  664. oneDoctor.name = name;
  665. oneDoctor.phone_number = reader.IsDBNull(3) ? "" : reader.GetString(3);
  666. oneDoctor.director_flag = reader.IsDBNull(4) ? 0 : reader.GetInt32(4);
  667. return oneDoctor;
  668. }
  669. }
  670. return null;
  671. }
  672. //查询医生用户名是否存在 存在返回true
  673. public static bool checkRepeatDoctor(string name)
  674. {
  675. string sql = "SELECT * FROM Doctor WHERE name = @name AND delete_flag = 0";
  676. SQLiteHelper db = new SQLiteHelper(dbPath);
  677. SQLiteParameter[] parameters = new SQLiteParameter[]{
  678. new SQLiteParameter("@name",name)
  679. };
  680. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  681. {
  682. while (reader.Read())
  683. {
  684. reader.Close();
  685. return true;
  686. }
  687. }
  688. return false;
  689. }
  690. //通过id主键查找Doctor
  691. public static doctor getDoctorById(string id)
  692. {
  693. string sql = "SELECT * FROM Doctor WHERE id = @id AND delete_flag = 0 LIMIT 1";
  694. SQLiteHelper db = new SQLiteHelper(dbPath);
  695. SQLiteParameter[] parameters = new SQLiteParameter[]{
  696. new SQLiteParameter("@id",id),
  697. };
  698. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  699. {
  700. while (reader.Read())
  701. {
  702. doctor temp = new doctor();
  703. temp.id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  704. temp.name = reader.IsDBNull(1) ? "" : reader.GetString(1);
  705. temp.pwd_hash = reader.IsDBNull(2) ? "" : reader.GetString(2);
  706. temp.phone_number = reader.IsDBNull(3) ? "" : reader.GetString(3);
  707. temp.director_flag = reader.IsDBNull(4) ? 0 : reader.GetInt32(4);
  708. return temp;
  709. }
  710. }
  711. return null;
  712. }
  713. //查找Doctor 返回目前还使用的医生id
  714. public static int getDoctorIdByNoDelete()
  715. {
  716. string sql = "SELECT * FROM Doctor WHERE delete_flag = 0 LIMIT 1";
  717. SQLiteHelper db = new SQLiteHelper(dbPath);
  718. SQLiteParameter[] parameters = new SQLiteParameter[]{};
  719. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  720. {
  721. while (reader.Read())
  722. {
  723. doctor temp = new doctor();
  724. temp.id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  725. temp.name = reader.IsDBNull(1) ? "" : reader.GetString(1);
  726. temp.pwd_hash = reader.IsDBNull(2) ? "" : reader.GetString(2);
  727. temp.phone_number = reader.IsDBNull(3) ? "" : reader.GetString(3);
  728. temp.director_flag = reader.IsDBNull(4) ? 0 : reader.GetInt32(4);
  729. return temp.id;
  730. }
  731. }
  732. return -1;
  733. }
  734. //Doctort表的插入
  735. public static void InsertDoctorData(string name, string pwd_hash, string phone_number, Boolean director_flag = false, Boolean delete_flag = false)
  736. {
  737. string sql = "INSERT INTO Doctor(name,pwd_hash,phone_number,director_flag,delete_flag)values(@name,@pwd_hash,@phone_number,@director_flag,@delete_flag)";
  738. SQLiteHelper db = new SQLiteHelper(dbPath);
  739. SQLiteParameter[] parameters = new SQLiteParameter[]{
  740. new SQLiteParameter("@name",name),
  741. new SQLiteParameter("@pwd_hash",pwd_hash),
  742. new SQLiteParameter("@phone_number",phone_number),
  743. new SQLiteParameter("@director_flag",director_flag),
  744. new SQLiteParameter("@delete_flag",delete_flag)
  745. };
  746. db.ExecuteNonQuery(sql, parameters);
  747. }
  748. //Doctor表的更新
  749. public static void UpdateDoctorData(string id, string name, string pwd_hash, string phone_number, Boolean director_flag = false, Boolean delete_flag = false)
  750. {
  751. //Boolean a = false;
  752. 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";
  753. SQLiteHelper db = new SQLiteHelper(dbPath);
  754. SQLiteParameter[] parameters = new SQLiteParameter[]{
  755. new SQLiteParameter("@name",name),
  756. new SQLiteParameter("@pwd_hash",pwd_hash),
  757. new SQLiteParameter("@phone_number",phone_number),
  758. new SQLiteParameter("@director_flag",director_flag),
  759. new SQLiteParameter("@delete_flag",delete_flag),
  760. new SQLiteParameter("@id",id)
  761. };
  762. db.ExecuteNonQuery(sql, parameters);
  763. }
  764. //Doctor表记录的删除
  765. public static int DeleteDoctorItem(string id)
  766. {
  767. string sql = "UPDATE Doctor SET delete_flag=1 WHERE id=@id";
  768. SQLiteHelper db = new SQLiteHelper(dbPath);
  769. SQLiteParameter[] parameters = new SQLiteParameter[]{
  770. new SQLiteParameter("@id",id)
  771. };
  772. return db.ExecuteNonQuery(sql, parameters);
  773. }
  774. #endregion
  775. #region 配置表Config的相关操作
  776. //查找所有的expression的content列
  777. public static void GetAllConfigContent(Dictionary<string, string> target)
  778. {
  779. target.Clear();
  780. string sql = "SELECT key,value FROM Config WHERE 1";
  781. SQLiteHelper db = new SQLiteHelper(dbPath);
  782. SQLiteParameter[] parameters = new SQLiteParameter[]{
  783. };
  784. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  785. {
  786. while (reader.Read())
  787. {
  788. string tempKey = reader.IsDBNull(0) ? "" : reader.GetString(0);
  789. string tempValue = reader.IsDBNull(1) ? "" : reader.GetString(1);
  790. if (tempKey == "")
  791. {
  792. break;
  793. }
  794. //KeyValuePair<string, double> temp = new KeyValuePair<string, double>(tempKey,0);
  795. target.Add(tempKey, tempValue);
  796. }
  797. }
  798. }
  799. //更新激活码信息
  800. public static void UpdateOrganizationName(string name)
  801. {
  802. //Boolean a = false;
  803. string sql = "UPDATE Config SET value=@name WHERE key='organization_name'";
  804. SQLiteHelper db = new SQLiteHelper(dbPath);
  805. SQLiteParameter[] parameters = new SQLiteParameter[]{
  806. new SQLiteParameter("@name",name)
  807. };
  808. db.ExecuteNonQuery(sql, parameters);
  809. }
  810. #endregion
  811. #region 以下是测试功能,请在生产环境之前删除这些功能
  812. public static byte[] getRecordData()
  813. {
  814. string dbPathTest = @"D:\\sourceCode\\github\\Junde_New\bin\\Debug\\data\\data.db";
  815. string sql = "SELECT Data FROM Record WHERE id = 22";
  816. SQLiteHelper db = new SQLiteHelper(dbPathTest);
  817. Console.WriteLine("database ok!");
  818. using (SQLiteDataReader reader = db.ExecuteReader(sql, null))
  819. {
  820. byte[] buffer = null;
  821. if (reader.HasRows)
  822. {
  823. reader.Read();
  824. long len = reader.GetBytes(reader.GetOrdinal("Data"), 0, null, 0, 0);
  825. Console.WriteLine("len is :" + len.ToString());
  826. buffer = new byte[len];
  827. len = reader.GetBytes(reader.GetOrdinal("Data"), 0, buffer, 0, (int)len);
  828. for(int i =0;i<100;i++)
  829. {
  830. Console.WriteLine(buffer[i]);
  831. }
  832. return buffer;
  833. //System.IO.MemoryStream ms = new System.IO.MemoryStream(buffer);
  834. //System.Drawing.Image iamge = System.Drawing.Image.FromStream(ms);
  835. //pictureBox1.Image = iamge;
  836. }
  837. }
  838. return null;
  839. }
  840. #endregion
  841. }
  842. }