CNAS取数仪器端升级
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

270 wiersze
11KB

  1. using CnasSynchronousCommon;
  2. using CnasSynchrousModel;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Data;
  6. using System.Data.OleDb;
  7. using System.Linq;
  8. using System.Text;
  9. namespace CnasSynchronusDAL
  10. {
  11. public static class FoxProDAL
  12. {
  13. /// <summary>
  14. /// 获取所有表名和表结构
  15. /// </summary>
  16. /// <param name="strPath"></param>
  17. /// <returns></returns>
  18. public static Dictionary<string, DataTable> ReadFoxProTables(FoxProOpenParams t)
  19. {
  20. Dictionary<string, DataTable> dictTables = new Dictionary<string, DataTable>();
  21. try
  22. {
  23. //连接字符串
  24. string connstring = string.Format("provider=VFPOLEDB.1;Source Type=DBF;data source={0};user id=admin;password={1}", t.StrPath,t.StrPwd);
  25. using (OleDbConnection conn = new OleDbConnection(connstring))
  26. {
  27. conn.Open();
  28. DataTable TablesName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //得到所有sheet的名字
  29. string sql = "";
  30. OleDbDataAdapter ada = null;
  31. foreach (DataRow dr in TablesName.Rows)
  32. {
  33. string strTableName = dr[2].ToString();
  34. sql = string.Format("SELECT * FROM [{0}] where 1=0", strTableName); //查询字符串
  35. ada = new OleDbDataAdapter(sql, connstring);
  36. DataSet set = new DataSet();
  37. ada.Fill(set);
  38. DataTable dt = set.Tables[0];
  39. if (!string.IsNullOrWhiteSpace(t.specialMethod.Method))
  40. {
  41. switch (t.specialMethod.Method.ToLower())
  42. {
  43. case "comcat": //合并某几个列,指定为某特定名称的列
  44. dt = FoxProSpecialDtMethod.FoxProSpecialDtMethodForComcat(dt, t.specialMethod.Value);
  45. break;
  46. }
  47. }
  48. dictTables.Add(strTableName.ToUpper(), dt);
  49. }
  50. }
  51. }
  52. catch (Exception ex)
  53. {
  54. //发生异常,写入日志
  55. AppLog.Error(ex.Message);
  56. }
  57. return dictTables;
  58. }
  59. internal static DataTable ReadFoxProTableStruct(FoxProOpenParams t, ConditionParams u)
  60. {
  61. DataTable dt = new DataTable();
  62. try
  63. {
  64. //连接字符串
  65. string connstring = string.Format("provider=VFPOLEDB.1;Source Type=DBF;data source={0};user id=admin;password={1}", t.StrPath, t.StrPwd);
  66. using (OleDbConnection conn = new OleDbConnection(connstring))
  67. {
  68. conn.Open();
  69. string sql = "";
  70. OleDbDataAdapter ada = null;
  71. sql = string.Format("SELECT * FROM [{0}] where 1=0", u.TableName); //查询字符串
  72. ada = new OleDbDataAdapter(sql, connstring);
  73. DataSet set = new DataSet();
  74. ada.Fill(set);
  75. dt= set.Tables[0];
  76. if (!string.IsNullOrWhiteSpace(t.specialMethod.Method))
  77. {
  78. switch (t.specialMethod.Method.ToLower())
  79. {
  80. case "comcat": //合并某几个列,指定为某特定名称的列
  81. dt=FoxProSpecialDtMethod.FoxProSpecialDtMethodForComcat(dt, t.specialMethod.Value);
  82. break;
  83. }
  84. }
  85. }
  86. }
  87. catch (Exception ex)
  88. {
  89. //发生异常,写入日志
  90. AppLog.Error(ex.Message);
  91. }
  92. return dt;
  93. }
  94. public static DataTable ReadFoxProTablesByDate(FoxProOpenParams t, ConditionParams u)
  95. {
  96. DataTable dt = new DataTable();
  97. try
  98. {
  99. //连接字符串
  100. string connstring = string.Format("provider=VFPOLEDB.1;Source Type=DBF;data source={0};user id=admin;password={1}", t.StrPath, t.StrPwd);
  101. using (OleDbConnection conn = new OleDbConnection(connstring))
  102. {
  103. conn.Open();
  104. DataTable TablesName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //得到所有sheet的名字
  105. string sql = "";
  106. OleDbDataAdapter ada = null;
  107. if (!string.IsNullOrWhiteSpace(t.autosql.FoxProViewName)&&!string.IsNullOrWhiteSpace(t.autosql.FoxProViewSql))
  108. sql = t.autosql.FoxProViewSql;
  109. else
  110. sql = string.Format("select * from [{0}]", u.TableName); //查询字符串
  111. ada = new OleDbDataAdapter(sql, connstring);
  112. DataSet set = new DataSet();
  113. ada.Fill(set);
  114. dt = set.Tables[0];
  115. if (!string.IsNullOrWhiteSpace(t.specialMethod.Method))
  116. {
  117. switch (t.specialMethod.Method.ToLower())
  118. {
  119. case "comcat": //合并某几个列,指定为某特定名称的列
  120. dt = FoxProSpecialDtMethod.FoxProSpecialDtMethodForComcat(set.Tables[0], t.specialMethod.Value);
  121. break;
  122. }
  123. }
  124. DataTable dt_Middle = dt.Clone();
  125. DateTime dtTime = DateTime.Now;
  126. foreach (DataRow dr in dt.Rows)
  127. {
  128. if (DateTime.TryParse(dr[u.DateColumn].ToString(), out dtTime))
  129. {
  130. if (dtTime > Convert.ToDateTime(u.DateValue))
  131. {
  132. DataRow drNew = dt_Middle.NewRow();
  133. drNew.ItemArray = dr.ItemArray;
  134. dt_Middle.Rows.Add(drNew);
  135. }
  136. }
  137. else if (IfSepcialDateFormat(dr[u.DateColumn].ToString(),t.timeFormat,ref dtTime))
  138. {
  139. if (dtTime > Convert.ToDateTime(u.DateValue))
  140. {
  141. DataRow drNew = dt_Middle.NewRow();
  142. drNew.ItemArray = dr.ItemArray;
  143. dt_Middle.Rows.Add(drNew);
  144. }
  145. }
  146. }
  147. dt = DateAndTimeTypeOpera(dt_Middle);
  148. }
  149. }
  150. catch (Exception ex)
  151. {
  152. //发生异常,写入日志
  153. AppLog.Error(ex.Message);
  154. }
  155. return dt;
  156. }
  157. public static bool IfSepcialDateFormat(string strValue,string strTimeFormat,ref DateTime dtTime)
  158. {
  159. bool bIfTrue = true;
  160. try
  161. {
  162. dtTime = DateTime.ParseExact(strValue.Trim(), strTimeFormat, new System.Globalization.CultureInfo("zh-CN", true));
  163. }
  164. catch (Exception e)
  165. {
  166. bIfTrue = false;
  167. AppLog.Error(e.Message);
  168. }
  169. return bIfTrue;
  170. }
  171. public static DataTable ReadFoxProTablesByTableName(string strPath, string strUser, string strPwd, string strViewName,string strViewSql,string strTableName)
  172. {
  173. DataSet set = new DataSet();
  174. try
  175. {
  176. //连接字符串
  177. string connstring = string.Format("provider=VFPOLEDB.1;Source Type=DBF;data source={0};user id=admin;password={1}", strPath, strPwd);
  178. using (OleDbConnection conn = new OleDbConnection(connstring))
  179. {
  180. conn.Open();
  181. DataTable TablesName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //得到所有sheet的名字
  182. string sql = "";
  183. OleDbDataAdapter ada = null;
  184. if (strViewName == strTableName && !string.IsNullOrWhiteSpace(strViewName))
  185. sql = strViewSql;
  186. else
  187. sql = string.Format("SELECT * FROM [{0}]", strTableName); //查询字符串
  188. ada = new OleDbDataAdapter(sql, connstring);
  189. ada.Fill(set);
  190. }
  191. }
  192. catch (Exception ex)
  193. {
  194. //发生异常,写入日志
  195. AppLog.Error(ex.Message);
  196. }
  197. return set.Tables[0];
  198. }
  199. /// <summary>
  200. /// 获取数据时,单独处理某些(Date和Time)类型数据,并把数据类型转换为字符串类型
  201. /// </summary>
  202. private static DataTable DateAndTimeTypeOpera(DataTable dt)
  203. {
  204. DataTable dtNewFormat = new DataTable();
  205. List<string> lstChangeColumn = new List<string>();
  206. //添加列
  207. foreach (DataColumn dc in dt.Columns)
  208. {
  209. string strDateType = dc.DataType.ToString();
  210. switch (strDateType.ToUpper())
  211. {
  212. case "SYSTEM.DATETIME":
  213. dtNewFormat.Columns.Add(dc.ColumnName, typeof(string)); //使用字符串来存储该字段,而不是采用它的数据库格式(C#无法区分Date, Time,DateTime,前两种格式会自动补充数据,导致数据的不准确)
  214. lstChangeColumn.Add(dc.ColumnName);
  215. break;
  216. default:
  217. dtNewFormat.Columns.Add(dc.ColumnName, dc.DataType);
  218. break;
  219. }
  220. }
  221. //添加数据行
  222. foreach (DataRow dr in dt.Rows)
  223. {
  224. DataRow drNewRow = dtNewFormat.NewRow();
  225. foreach (DataColumn dc in dtNewFormat.Columns)
  226. {
  227. if (lstChangeColumn.Contains(dc.ColumnName))
  228. {
  229. if (dr[dc.ColumnName] != null && dr[dc.ColumnName].ToString() != "")
  230. {
  231. string strTime = Convert.ToDateTime(dr[dc.ColumnName]).ToString("HH:mm:ss");
  232. if (strTime == "00:00:00")
  233. drNewRow[dc.ColumnName] = Convert.ToDateTime(dr[dc.ColumnName]).ToString("yyyy-MM-dd");
  234. else
  235. drNewRow[dc.ColumnName] = Convert.ToDateTime(dr[dc.ColumnName]).ToString("yyyy-MM-dd HH:mm:ss");
  236. }
  237. }
  238. else
  239. {
  240. drNewRow[dc.ColumnName] = dr[dc.ColumnName];
  241. }
  242. }
  243. dtNewFormat.Rows.Add(drNewRow);
  244. }
  245. //返回数据
  246. return dtNewFormat;
  247. }
  248. }
  249. }