SqliteDBHelper.cs 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Data.SQLite;
  5. using System.IO;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. namespace UAS_LabelMachine
  9. {
  10. class SqliteDBHelper
  11. {
  12. private string _fileName;
  13. private string _connectionString;
  14. private SQLiteConnection _odcConnection = null;
  15. private SQLiteCommand command = null;
  16. public SqliteDBHelper(string fileName)
  17. {
  18. this._fileName = fileName;
  19. this._connectionString = @"Data Source=" + fileName + ";";
  20. Open();
  21. }
  22. public void Open()
  23. {
  24. try
  25. {
  26. // 建立连接
  27. this._odcConnection = new SQLiteConnection(this._connectionString);
  28. // 打开连接
  29. this._odcConnection.Open();
  30. }
  31. catch (Exception ex)
  32. {
  33. MessageBox.Show(ex.Message);
  34. }
  35. }
  36. public void ExecuteZip()
  37. {
  38. command = new SQLiteCommand("Vacuum", this._odcConnection);
  39. command.ExecuteNonQuery();
  40. }
  41. public void Close()
  42. {
  43. this._odcConnection.Close();
  44. }
  45. public DataTable GetDataTable(string sql)
  46. {
  47. DataTable ds = new DataTable();
  48. command = new SQLiteCommand(sql, this._odcConnection);
  49. Reconnect(command);
  50. SQLiteDataAdapter adapter = new SQLiteDataAdapter(command);
  51. try
  52. {
  53. adapter.Fill(ds);
  54. }
  55. catch (Exception ex)
  56. {
  57. throw new Exception("sql語句: " + sql + " 執行失敗!" + ex.Message);
  58. }
  59. adapter.Dispose();
  60. return ds;
  61. }
  62. public DataSet GetDataSet(string sql)
  63. {
  64. DataSet ds = new DataSet();
  65. command = new SQLiteCommand(sql, this._odcConnection);
  66. Reconnect(command);
  67. SQLiteDataAdapter adapter = new SQLiteDataAdapter(command);
  68. try
  69. {
  70. adapter.Fill(ds);
  71. }
  72. catch (Exception ex)
  73. {
  74. throw new Exception("sql語句: " + sql + " 執行失敗!" + ex.Message);
  75. }
  76. adapter.Dispose();
  77. return ds;
  78. }
  79. public void Reconnect(SQLiteCommand cmd)
  80. {
  81. if (cmd.Connection.State == ConnectionState.Closed)
  82. {
  83. cmd.Connection.Open();
  84. //超时重连
  85. }
  86. }
  87. /// <summary>
  88. /// 根据表名获取该表字段数据类型
  89. /// </summary>
  90. public DataTable GetColumnDataType(string TableName)
  91. {
  92. DataTable dt = new DataTable();
  93. command = new SQLiteCommand("select Column_Name,Data_Type from cols where TABLE_name=upper('" + TableName + "')", this._odcConnection);
  94. Reconnect(command);
  95. SQLiteDataAdapter ad = new SQLiteDataAdapter(command);
  96. ad.Fill(dt);
  97. ad.Dispose();
  98. return dt;
  99. }
  100. /// <summary>
  101. /// 获取第一行第一列的信息
  102. /// </summary>
  103. public object getFieldDataByCondition(string TableName, string Field, string Condition)
  104. {
  105. DataTable dt = new DataTable();
  106. string sql = "select " + Field + " from " + TableName + " where " + Condition;
  107. command = new SQLiteCommand(sql, this._odcConnection);
  108. Reconnect(command);
  109. SQLiteDataAdapter ad = new SQLiteDataAdapter();
  110. ad.SelectCommand = command;
  111. try
  112. {
  113. ad.Fill(dt);
  114. }
  115. catch (Exception)
  116. {
  117. this._odcConnection = new SQLiteConnection(this._connectionString);
  118. this._odcConnection.Open();
  119. command = new SQLiteCommand(sql, this._odcConnection);
  120. ad = new SQLiteDataAdapter();
  121. ad.SelectCommand = command;
  122. ad.Fill(dt);
  123. }
  124. ad.Dispose();
  125. if (dt.Rows.Count > 0)
  126. {
  127. return dt.Rows[0][0];
  128. }
  129. else
  130. {
  131. return "";
  132. }
  133. }
  134. public void BatchInsertDataTable(string sql, string[] param, params object[][] param1)
  135. {
  136. command = new SQLiteCommand(sql, _odcConnection);
  137. SQLiteDataAdapter adapter = new SQLiteDataAdapter();
  138. adapter.UpdateBatchSize = param1[0].Length;
  139. //因为第一个数组保存的是参数的名称,所以循环从1而不是0开始
  140. //将第一个数组的下标固定为0作为循环添加的参数的名称
  141. for (int i = 0; i < param.Length; i++)
  142. {
  143. command.Parameters.Add(new SQLiteParameter(param[i].ToString(), param1[i]));
  144. }
  145. try
  146. {
  147. command.ExecuteNonQuery();
  148. }
  149. catch (Exception)
  150. {
  151. }
  152. }
  153. /// <summary>
  154. /// 插入DataTable到Access数据库
  155. /// </summary>
  156. /// <param name="dt"></param>
  157. /// <param name="TableName"></param>
  158. public void SaveDataTable(DataTable dt, string TableName)
  159. {
  160. StringBuilder sb = new StringBuilder();
  161. //预防插入的DataTable中存在不属于该表的列,在进行下一步操作之前全部剔除
  162. //DataTable data = (DataTable)ExecuteSql("select top 1 * from " + TableName, "select");
  163. ////将所有的字段拼接起来
  164. //for (int i = 0; i < data.Columns.Count; i++)
  165. //{
  166. // sb.Append("#" + data.Columns[i].ColumnName.ToString().ToUpper());
  167. //}
  168. ////移除掉所有不属于该表的列
  169. //for (int i = dt.Columns.Count - 1; i >= 0; i--)
  170. //{
  171. // if (!sb.ToString().Contains(dt.Columns[i].ColumnName.ToUpper()))
  172. // {
  173. // dt.Columns.RemoveAt(i);
  174. // }
  175. //}
  176. sb.Clear();
  177. sb.Append("insert into " + TableName + " (");
  178. string field = "";
  179. string valuefield = "";
  180. for (int i = 0; i < dt.Columns.Count; i++)
  181. {
  182. if (i != dt.Columns.Count - 1)
  183. {
  184. field += dt.Columns[i].ColumnName + ",";
  185. valuefield += "?,";
  186. }
  187. else
  188. {
  189. field += dt.Columns[i].ColumnName + "";
  190. valuefield += "?";
  191. }
  192. }
  193. sb.Append(field + ") values(" + valuefield + ")");
  194. SQLiteTransaction tx = this._odcConnection.BeginTransaction();
  195. command = new SQLiteCommand();
  196. command.Connection = this._odcConnection;
  197. command.Transaction = tx;
  198. string sql = sb.ToString();
  199. try
  200. {
  201. for (int i = 0; i < dt.Rows.Count; i++)
  202. {
  203. command.CommandText = sql;
  204. for (int j = 0; j < dt.Columns.Count; j++)
  205. {
  206. command.Parameters.AddWithValue(dt.Columns[j].ColumnName, dt.Rows[i][j]);
  207. }
  208. try
  209. {
  210. command.ExecuteNonQuery();
  211. command.Parameters.Clear();
  212. }
  213. catch (Exception e)
  214. {
  215. MessageBox.Show(e.Message.ToString());
  216. }
  217. }
  218. tx.Commit();
  219. }
  220. catch (Exception E)
  221. {
  222. tx.Rollback();
  223. throw new Exception(E.Message);
  224. }
  225. }
  226. public void BatchInsert(string tableName, DataTable dt)
  227. {
  228. List<string> columnList = new List<string>();
  229. foreach (DataColumn one in dt.Columns)
  230. {
  231. columnList.Add(one.ColumnName);
  232. }
  233. SQLiteDataAdapter adapter = new SQLiteDataAdapter();
  234. adapter.SelectCommand = new SQLiteCommand("select pib_id from " + tableName, this._odcConnection);
  235. using (SQLiteCommandBuilder builder = new SQLiteCommandBuilder(adapter))
  236. {
  237. adapter.InsertCommand = builder.GetInsertCommand();
  238. foreach (string one in columnList)
  239. {
  240. adapter.InsertCommand.Parameters.Add(new SQLiteParameter(one.ToLower(), "Test"));
  241. }
  242. }
  243. }
  244. /// <summary>
  245. /// 获取指定表的记录的条数 ,带条件
  246. /// </summary>
  247. /// <returns></returns>
  248. public int getRowCount(string TableName, string Condition)
  249. {
  250. DataTable dt = new DataTable();
  251. string sql = "select count(1) from " + TableName + " where " + Condition;
  252. command = new SQLiteCommand(sql, this._odcConnection);
  253. Reconnect(command);
  254. SQLiteDataAdapter ad = new SQLiteDataAdapter(command);
  255. ad.Fill(dt);
  256. ad.Dispose();
  257. return int.Parse(dt.Rows[0][0].ToString());
  258. }
  259. /// <summary>
  260. /// 获取指定表的记录的条数 ,不带条件
  261. /// </summary>
  262. /// <param name="TableName"></param>
  263. /// <returns></returns>
  264. public int getRowCount(string TableName)
  265. {
  266. DataTable dt = new DataTable();
  267. string sql = "select count(1) from " + TableName;
  268. command = new SQLiteCommand(sql, this._odcConnection);
  269. Reconnect(command);
  270. SQLiteDataAdapter ad = new SQLiteDataAdapter(command);
  271. ad.Fill(dt);
  272. ad.Dispose();
  273. return int.Parse(dt.Rows[0][0].ToString());
  274. }
  275. /// <summary>
  276. /// 通过表名和获取单行的记录
  277. /// </summary>
  278. public DataTable getFieldsDataByCondition(string TableName, string[] Fields, string Condition)
  279. {
  280. DataTable dt = new DataTable();
  281. string sql = "select ";
  282. sql += AddField(Fields);
  283. sql += " from " + TableName + " where " + Condition + " and rownum=1";
  284. command = new SQLiteCommand(sql, this._odcConnection);
  285. Reconnect(command);
  286. SQLiteDataAdapter ad = new SQLiteDataAdapter(command);
  287. try
  288. {
  289. ad.Fill(dt);
  290. }
  291. catch (Exception)
  292. {
  293. this._odcConnection = new SQLiteConnection(this._connectionString);
  294. this._odcConnection.Open();
  295. command = new SQLiteCommand(sql, this._odcConnection);
  296. ad = new SQLiteDataAdapter();
  297. ad.SelectCommand = command;
  298. ad.Fill(dt);
  299. }
  300. ad.Dispose();
  301. return dt;
  302. }
  303. /// <summary>
  304. /// 按分页获取数据
  305. /// </summary>
  306. /// <param name="TableName">表名</param>
  307. /// <param name="Fields">查询字段</param>
  308. /// <param name="CurrentPage">当前页面</param>
  309. /// <param name="PageSize">页面展示条数</param>
  310. /// <param name="Caller"></param>
  311. /// <returns></returns>
  312. // SELECT * FROM (SELECT A.* FROM (SELECT* FROM datalist) A WHERE ROWNUM <= 50) WHERE ROWNUM >= 21
  313. public DataTable getFieldsDatasByPageing(string TableName, string Fields, int CurrentPage, int PageSize, string Caller, params string[] condition)
  314. {
  315. DataTable dt = new DataTable();
  316. StringBuilder sql = new StringBuilder();
  317. //先查询出配置出去的列
  318. //获取查询的列
  319. string[] caption = GetCaptionFromField(Fields);
  320. //获取对应列的描述
  321. string[] field = GetField(Fields);
  322. sql.Append(" select * from (select RowNum RN, A.* from (select ");
  323. sql.Append(AddField(caption));
  324. if (condition.Length > 0)
  325. {
  326. if (condition[0] != null && condition[0].Trim() != "")
  327. sql.Append(" from " + TableName + " where " + condition[0] + " ) A where ROWNUM <=" + CurrentPage * PageSize + ") where RN>" + (CurrentPage - 1) * PageSize);
  328. else
  329. sql.Append(" from " + TableName + ") A where ROWNUM <= " + CurrentPage * PageSize + ") where RN> " + (CurrentPage - 1) * PageSize);
  330. }
  331. command = new SQLiteCommand(sql.ToString(), this._odcConnection);
  332. Reconnect(command);
  333. SQLiteDataAdapter ad = new SQLiteDataAdapter(command);
  334. ad.Fill(dt);
  335. ad.Dispose();
  336. dt.Columns.RemoveAt(0);
  337. foreach (DataColumn dc in dt.Columns)
  338. {
  339. dc.ColumnName = field[dt.Columns.IndexOf(dc)];
  340. dc.Caption = caption[dt.Columns.IndexOf(dc)];
  341. }
  342. return dt;
  343. }
  344. /// <summary>
  345. /// 通过表名,字段和条件获取DataTable类型的数据
  346. /// </summary>
  347. public DataTable getFieldsDatasByCondition(string TableName, string[] Fields, string Condition)
  348. {
  349. DataTable dt = new DataTable();
  350. string sql = "select ";
  351. sql += AddField(Fields);
  352. sql += " from " + TableName + " where " + Condition;
  353. command = new SQLiteCommand(sql, this._odcConnection);
  354. Reconnect(command);
  355. SQLiteDataAdapter ad = new SQLiteDataAdapter(command);
  356. try
  357. {
  358. ad.Fill(dt);
  359. }
  360. catch (Exception)
  361. {
  362. this._odcConnection = new SQLiteConnection(this._connectionString);
  363. this._odcConnection.Open();
  364. command = new SQLiteCommand(sql, this._odcConnection);
  365. ad = new SQLiteDataAdapter();
  366. ad.SelectCommand = command;
  367. ad.Fill(dt);
  368. }
  369. ad.Dispose();
  370. return dt;
  371. }
  372. /// <summary>
  373. /// 通过表名,字段获取DataTable类型的数据
  374. /// </summary>
  375. public DataTable getFieldsDatas(string TableName, string Fields)
  376. {
  377. DataTable dt = new DataTable();
  378. string sql = "select ";
  379. sql += Fields;
  380. sql += " from " + TableName;
  381. command = new SQLiteCommand(sql, this._odcConnection);
  382. Reconnect(command);
  383. SQLiteDataAdapter ad = new SQLiteDataAdapter(command);
  384. ad.SelectCommand = command;
  385. try
  386. {
  387. ad.Fill(dt);
  388. }
  389. catch (Exception)
  390. {
  391. this._odcConnection = new SQLiteConnection(this._connectionString);
  392. this._odcConnection.Open();
  393. command = new SQLiteCommand(sql, this._odcConnection);
  394. ad = new SQLiteDataAdapter();
  395. ad.SelectCommand = command;
  396. ad.Fill(dt);
  397. }
  398. ad.Dispose();
  399. return dt;
  400. }
  401. /// <summary>
  402. /// 获取DbFind的数据的DataTable的结构
  403. /// </summary>
  404. /// <param name="field"></param>
  405. /// <param name="caller"></param>
  406. /// <returns></returns>
  407. public DataTable GetDbFindDataTable(string field, string caller)
  408. {
  409. string sql = "select * from dbfindsetui where ds_caller='" + caller + "' and ds_whichui='" + field + "'";
  410. DataTable dt = (DataTable)ExecuteSql(sql, "select");
  411. if (dt.Rows.Count != 0)
  412. {
  413. //通过#号分割字段
  414. string[] dbfield = dt.Rows[0]["ds_findtoui"].ToString().Split('#');
  415. string[] cnfield = dt.Rows[0]["ds_dbcaption"].ToString().Split('#');
  416. //获取查询要查询的Table
  417. string dbtable = dt.Rows[0]["ds_tables"].ToString();
  418. //拼接查询的字段
  419. for (int i = 0; i < dbfield.Length; i++)
  420. {
  421. dbfield[i] = dbfield[i].Split(',')[0];
  422. }
  423. //新建一个空的DataTable
  424. DataTable dt1 = new DataTable();
  425. //往空的DataTable添加结构,ColumnName是中文,Caption是实际的字段名称
  426. for (int i = 0; i < cnfield.Length; i++)
  427. {
  428. dt1.Columns.Add(cnfield[i]);
  429. dt1.Columns[i].Caption = dbfield[i];
  430. }
  431. //返回一个带有结构的空的DataTable
  432. //DbFind.BindTable1 = dbtable;
  433. return dt1;
  434. }
  435. else
  436. {
  437. return null;
  438. }
  439. }
  440. /// <summary>
  441. /// 检测内容是否存在
  442. /// </summary>
  443. /// <param name="TableName"></param>
  444. /// <param name="Condition"></param>
  445. /// <returns></returns>
  446. public bool CheckExist(string TableName, string Condition)
  447. {
  448. string sql = "select count(1) from " + TableName + " where " + Condition;
  449. command = new SQLiteCommand(sql, this._odcConnection);
  450. Reconnect(command);
  451. SQLiteDataAdapter ad = new SQLiteDataAdapter(command);
  452. DataTable dt = new DataTable();
  453. try
  454. {
  455. ad.Fill(dt);
  456. }
  457. catch (Exception)
  458. {
  459. this._odcConnection = new SQLiteConnection(this._connectionString);
  460. this._odcConnection.Open();
  461. command = new SQLiteCommand(sql, this._odcConnection);
  462. ad = new SQLiteDataAdapter();
  463. ad.SelectCommand = command;
  464. ad.Fill(dt);
  465. }
  466. ad.Dispose();
  467. return int.Parse(dt.Rows[0][0].ToString()) > 0;
  468. }
  469. /// <summary>
  470. /// 直接执行SQL,同时传入SQL的类型
  471. /// </summary>
  472. /// <param name="SQL"></param>
  473. /// <param name="Type"></param>
  474. /// <returns></returns>
  475. public object ExecuteSql(string SQL, string Type)
  476. {
  477. object result = null;
  478. command = new SQLiteCommand(SQL, this._odcConnection);
  479. Console.WriteLine(SQL);
  480. Reconnect(command);
  481. switch (Type.ToUpper())
  482. {
  483. case "SELECT":
  484. SQLiteDataAdapter ad = new SQLiteDataAdapter(command);
  485. result = new DataTable();
  486. try
  487. {
  488. ad.Fill((DataTable)result);
  489. }
  490. catch (Exception)
  491. {
  492. this._odcConnection = new SQLiteConnection(this._connectionString);
  493. this._odcConnection.Open();
  494. command = new SQLiteCommand(SQL, this._odcConnection);
  495. ad = new SQLiteDataAdapter();
  496. ad.SelectCommand = command;
  497. ad.Fill((DataTable)result);
  498. }
  499. break;
  500. case "DELETE":
  501. try
  502. {
  503. result = command.ExecuteNonQuery();
  504. }
  505. catch (Exception)
  506. {
  507. command.Connection = new SQLiteConnection(this._connectionString);
  508. command.Connection.Open();
  509. result = command.ExecuteNonQuery();
  510. }
  511. break;
  512. case "UPDATE":
  513. try
  514. {
  515. result = command.ExecuteNonQuery();
  516. }
  517. catch (Exception)
  518. {
  519. command.Connection = new SQLiteConnection(this._connectionString);
  520. command.Connection.Open();
  521. result = command.ExecuteNonQuery();
  522. }
  523. break;
  524. case "INSERT":
  525. try
  526. {
  527. result = command.ExecuteNonQuery();
  528. }
  529. catch (Exception)
  530. {
  531. command.Connection = new SQLiteConnection(this._connectionString);
  532. command.Connection.Open();
  533. result = command.ExecuteNonQuery();
  534. }
  535. break;
  536. }
  537. return result;
  538. }
  539. /// <summary>
  540. /// 为了同步BS端的条码维护,检测时允许问号的存在,在检测时默认将问号换成:Param参数
  541. /// </summary>
  542. /// <param name="SQL"></param>
  543. public void CheckSQL(string SQL)
  544. {
  545. SQL = SQL.Replace("?", ":Param");
  546. command = new SQLiteCommand(SQL, this._odcConnection);
  547. command.ExecuteNonQuery();
  548. }
  549. public int GetDistinctRowCount(string TableName, string Field)
  550. {
  551. DataTable dt = new DataTable();
  552. string sql = "select distinct count('" + Field + "') from " + TableName;
  553. command = new SQLiteCommand(sql, this._odcConnection);
  554. Reconnect(command);
  555. SQLiteDataAdapter ad = new SQLiteDataAdapter(command);
  556. try
  557. {
  558. ad.Fill(dt);
  559. }
  560. catch (Exception)
  561. {
  562. this._odcConnection = new SQLiteConnection(this._connectionString);
  563. this._odcConnection.Open();
  564. command = new SQLiteCommand(sql, this._odcConnection);
  565. ad = new SQLiteDataAdapter();
  566. ad.SelectCommand = command;
  567. ad.Fill(dt);
  568. }
  569. ad.Dispose();
  570. return int.Parse(dt.Rows[0][0].ToString());
  571. }
  572. /// <summary>
  573. /// 根据Caller获取流水号
  574. /// </summary>
  575. /// <param name="Caller"></param>
  576. /// <returns></returns>
  577. public string GetSerialNumberByCaller(string Caller)
  578. {
  579. string SerialNumber = getFieldDataByCondition("MaxNumbers", "mn_number", "mn_tablename='" + Caller + "'").ToString();
  580. UpdateByCondition("MaxNumbers", "mn_number=mn_number+1", "mn_tablename='" + Caller + "'");
  581. return SerialNumber;
  582. }
  583. /// <summary>
  584. /// 通过序列的名称获取序列
  585. /// </summary>
  586. /// <param name="SeqName"></param>
  587. /// <returns></returns>
  588. public string GetSEQ(string SeqName)
  589. {
  590. DataTable dt = new DataTable();
  591. dt = (DataTable)ExecuteSql("SELECT " + SeqName + ".NEXTVAL FROM DUAL", "select");
  592. return dt.Rows[0][0].ToString();
  593. }
  594. /// <summary>
  595. /// 通过序列的名称获取序列
  596. /// </summary>
  597. /// <param name="SeqName"></param>
  598. /// <returns></returns>
  599. public string[] GetSEQ(string SeqName, int Num)
  600. {
  601. DataTable dt = new DataTable();
  602. dt = (DataTable)ExecuteSql("SELECT " + SeqName + ".nextval FROM DUAL CONNECT BY LEVEL<=" + Num, "select");
  603. string[] SerialNum = new string[dt.Rows.Count];
  604. for (int i = 0; i < dt.Rows.Count; i++)
  605. {
  606. SerialNum[i] = dt.Rows[i][0].ToString();
  607. }
  608. return SerialNum;
  609. }
  610. /// <summary>
  611. /// 取Configs表中的配置,进行该客户是否执行某个操作
  612. /// </summary>
  613. /// <param name="Code"></param>
  614. /// <param name="Caller"></param>
  615. /// <returns></returns>
  616. public object GetConfig(string Code, string Caller)
  617. {
  618. DataTable dt = new DataTable();
  619. string sql = "select Data from configs where code='" + Code + "' and caller='" + Caller + "'";
  620. dt = (DataTable)ExecuteSql(sql, "select");
  621. if (dt.Rows.Count == 0)
  622. {
  623. return "";
  624. }
  625. else
  626. {
  627. return dt.Rows[0]["Data"];
  628. }
  629. }
  630. //将数据类型的列类型转换为DataTable
  631. public DataTable DataTypeColumnToDataTable(DataTable dt)
  632. {
  633. DataTable dt1 = new DataTable();
  634. dt1.Rows.Add();
  635. foreach (DataRow dr in dt.Rows)
  636. {
  637. dt1.Columns.Add(dr[0].ToString());
  638. int index = dt.Rows.IndexOf(dr);
  639. if (dr[1].ToString() == "NUMBER")
  640. {
  641. dt1.Rows[0][index] = 0;
  642. }
  643. if (dr[1].ToString() == "VARCHAR2")
  644. {
  645. dt1.Rows[0][index] = "这是一段文字";
  646. }
  647. if (dr[1].ToString() == "DATE")
  648. {
  649. dt1.Rows[0][index] = DateTime.Now.ToString("yyyy-MM-dd");
  650. }
  651. if (dr[1].ToString() == "FLOAT")
  652. {
  653. dt1.Rows[0][index] = 1.0;
  654. }
  655. if (dr[1].ToString() == "CLOB")
  656. {
  657. dt1.Rows[0][index] = "一段长文字";
  658. }
  659. }
  660. return dt1;
  661. }
  662. /// <summary>
  663. /// 通过条件更新
  664. /// </summary>
  665. /// <param name="TableName"></param>
  666. /// <param name="update"></param>
  667. /// <param name="condition"></param>
  668. public int UpdateByCondition(string TableName, string update, string condition)
  669. {
  670. string sql = "update " + TableName + " set " + update + " where " + condition;
  671. command = new SQLiteCommand(sql, this._odcConnection);
  672. int Rowcount = 0;
  673. Reconnect(command);
  674. try
  675. {
  676. Rowcount = command.ExecuteNonQuery();
  677. }
  678. catch (Exception)
  679. {
  680. command.Connection = new SQLiteConnection(this._connectionString);
  681. command.Connection.Open();
  682. Rowcount = command.ExecuteNonQuery();
  683. }
  684. return Rowcount;
  685. }
  686. /// <summary>
  687. /// 出现异常进行回滚的执行方法
  688. /// </summary>
  689. /// <param name="SQL"></param>
  690. public void ExecuteSQLTran(params string[] SQL)
  691. {
  692. SQLiteTransaction tx = this._odcConnection.BeginTransaction();
  693. command = new SQLiteCommand();
  694. command.Connection = this._odcConnection;
  695. command.Transaction = tx;
  696. try
  697. {
  698. foreach (string sql in SQL)
  699. {
  700. if (!String.IsNullOrEmpty(sql))
  701. {
  702. command.CommandText = sql;
  703. try
  704. {
  705. command.ExecuteNonQuery();
  706. }
  707. catch (Exception)
  708. {
  709. command.Connection = new SQLiteConnection(this._connectionString);
  710. command.Connection.Open();
  711. command.ExecuteNonQuery();
  712. }
  713. }
  714. }
  715. tx.Commit();
  716. }
  717. catch (Exception E)
  718. {
  719. tx.Rollback();
  720. throw new Exception(E.Message);
  721. }
  722. }
  723. /// <summary>
  724. /// 用于将string 的数组转换成SQL的查询内容
  725. /// </summary>
  726. /// <param name="Fields"></param>
  727. /// <returns></returns>
  728. private string AddField(string[] Fields)
  729. {
  730. string sql = " ";
  731. foreach (string field in Fields)
  732. {
  733. sql += field + ",";
  734. }
  735. return sql.Substring(0, sql.Length - 1);
  736. }
  737. /// <summary>
  738. /// 通过查询的内容获取到字段的描述
  739. /// </summary>
  740. /// <param name="field"></param>
  741. /// <returns></returns>
  742. private static string[] GetCaptionFromField(string field)
  743. {
  744. string[] caption = field.Split(',');
  745. for (int i = 0; i < caption.Length; i++)
  746. {
  747. caption[i] = caption[i].Substring(0, caption[i].LastIndexOf("as")).Trim();
  748. }
  749. return caption;
  750. }
  751. /// <summary>
  752. /// 通过查询的语句获取查询的字段
  753. /// </summary>
  754. /// <param name="field"></param>
  755. /// <returns></returns>
  756. private static string[] GetField(string field)
  757. {
  758. string[] fields = field.Split(',');
  759. for (int i = 0; i < fields.Length; i++)
  760. {
  761. fields[i] = fields[i].Substring(fields[i].LastIndexOf("as") + 2, fields[i].Length - fields[i].LastIndexOf("as") - 2).Trim();
  762. }
  763. return fields;
  764. }
  765. public object GetLabelParam(string sql)
  766. {
  767. DataTable dt = new DataTable();
  768. command = new SQLiteCommand(sql, this._odcConnection);
  769. Reconnect(command);
  770. SQLiteDataAdapter ad = new SQLiteDataAdapter();
  771. ad.SelectCommand = command;
  772. try
  773. {
  774. ad.Fill(dt);
  775. }
  776. catch (Exception)
  777. {
  778. this._odcConnection = new SQLiteConnection(this._connectionString);
  779. this._odcConnection.Open();
  780. command = new SQLiteCommand(sql, this._odcConnection);
  781. ad = new SQLiteDataAdapter();
  782. ad.SelectCommand = command;
  783. ad.Fill(dt);
  784. }
  785. if (dt.Rows.Count > 0)
  786. {
  787. ad.Dispose();
  788. return dt.Rows[0][0];
  789. }
  790. else
  791. {
  792. return "";
  793. }
  794. }
  795. public static string[] GetParamFromSQL(string SQL)
  796. {
  797. string[] par = SQL.Split(':');
  798. //用来存参数的数组
  799. StringBuilder[] addpar = new StringBuilder[par.Length - 1];
  800. string[] param = new string[par.Length - 1];
  801. for (int i = 0; i < par.Length - 1; i++)
  802. {
  803. //新建一个char类型的数组用来存储每个字节的变量
  804. char[] c = par[i + 1].ToCharArray();
  805. addpar[i] = new StringBuilder();
  806. for (int j = 0; j < c.Length; j++)
  807. {
  808. if (c[j] != ' ' && c[j] != ',' && c[j] != ')')
  809. {
  810. addpar[i].Append(c[j]);
  811. }
  812. else
  813. {
  814. break;
  815. }
  816. }
  817. }
  818. for (int i = 0; i < par.Length - 1; i++)
  819. {
  820. param[i] = addpar[i].ToString();
  821. }
  822. return param;
  823. }
  824. public void AddColumFromDataTable(DataTable dt, string tablename)
  825. {
  826. DataTable dt2 = (DataTable)ExecuteSql("select * from " + tablename + " limit 0,1", "select");
  827. foreach (DataColumn item in dt.Columns)
  828. {
  829. if (!dt2.Columns.Contains(item.ToString()))
  830. {
  831. switch (item.DataType.ToString())
  832. {
  833. case "System.String":
  834. ExecuteSql("alter table " + tablename + " add [" + item.ToString() + "] VARCHAR(200) NULL", "update");
  835. break;
  836. case "System.Decimal":
  837. ExecuteSql("alter table " + tablename + " add [" + item.ToString() + "] NUMERIC NULL", "update");
  838. break;
  839. case "System.DateTime":
  840. ExecuteSql("alter table " + tablename + " add [" + item.ToString() + "] DATE NULL", "update");
  841. break;
  842. default:
  843. break;
  844. }
  845. }
  846. }
  847. }
  848. }
  849. }