CNAS取数仪器端升级
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

272 lignes
10KB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Data.SqlClient;
  5. using System.Linq;
  6. using System.Text;
  7. using CnasSynchronousCommon;
  8. namespace CnasSynchronusDAL
  9. {
  10. public static class SqlServerDAL
  11. {
  12. /// <summary>
  13. /// 数据库连接字符串
  14. /// </summary>
  15. private static string connectionStr ="";
  16. public static void CreateConnection(string strHost,string strName,string strUserId,string strPwd)
  17. {
  18. SqlServerDAL.connectionStr =$"Data Source = {strHost}; Initial Catalog = {strName}; User Id = {strUserId}; Password = {strPwd};";
  19. }
  20. /// <summary>
  21. /// 查询操作
  22. /// </summary>
  23. /// <param name="sql"></param>
  24. /// <returns></returns>
  25. public static DataTable GetDataTable(string sql, params SqlParameter[] sp)
  26. {
  27. using (SqlConnection conn = new SqlConnection(connectionStr))
  28. {
  29. conn.Open();
  30. using (SqlDataAdapter sda = new SqlDataAdapter(sql, conn))
  31. {
  32. sda.SelectCommand.Parameters.AddRange(sp);
  33. DataTable dt = new DataTable();
  34. sda.Fill(dt);
  35. return dt;
  36. }
  37. }
  38. }
  39. internal static DataTable GetDataStruct(string strTableName,string strViewName,string strViewSql)
  40. {
  41. string strSql = "";
  42. if (strViewName == strTableName && string.IsNullOrWhiteSpace(strViewName))
  43. strSql = strViewSql + $" where 1=0";
  44. else
  45. strSql = $"select * from {strTableName} where 1=0";
  46. return GetDataTable(strSql, new SqlParameter[] { });
  47. }
  48. /// <summary>
  49. /// 增删改操作
  50. /// </summary>
  51. /// <param name="sql">sql语句</param>
  52. /// <returns>执行后的条数</returns>
  53. public static int ExecuteNonQuery(string sql, params SqlParameter[] sp)
  54. {
  55. using (SqlConnection conn = new SqlConnection(connectionStr))
  56. {
  57. conn.Open();
  58. using (SqlCommand cmd = new SqlCommand(sql, conn))
  59. {
  60. cmd.Parameters.AddRange(sp);
  61. int i = cmd.ExecuteNonQuery();
  62. return i;
  63. }
  64. }
  65. }
  66. /// <summary>
  67. /// 执行一条SQL语句,返回首行首列
  68. /// </summary>
  69. /// <param name="sql">sql语句</param>
  70. /// <returns>首行首列</returns>
  71. public static object ExecuteScalar(string sql, params SqlParameter[] sp)
  72. {
  73. using (SqlConnection conn = new SqlConnection(connectionStr))
  74. {
  75. conn.Open();
  76. using (SqlCommand cmd = new SqlCommand(sql, conn))
  77. {
  78. cmd.Parameters.AddRange(sp);
  79. return cmd.ExecuteScalar();
  80. }
  81. }
  82. }
  83. /// <summary>
  84. /// 根据表名获取数据
  85. /// </summary>
  86. /// <param name="strTableName"></param>
  87. /// <returns></returns>
  88. public static DataTable GetDataByTableName(string strTableName)
  89. {
  90. return GetDataTable($"select * from {strTableName}",new SqlParameter[] { });
  91. }
  92. /// <summary>
  93. /// 根据表名,时间列,时间值,获得表中所有大于该时间的行集合
  94. /// </summary>
  95. /// <param name="strTableName"></param>
  96. /// <param name="strColumnName"></param>
  97. /// <param name="strColumnValue"></param>
  98. /// <returns></returns>
  99. public static DataTable GetDataByDateColumn(string strViewName,string strViewSql,string strTableName, string strColumnName, string strColumnValue)
  100. {
  101. DataTable dtReturn = new DataTable();
  102. try
  103. {
  104. string strSql = "";
  105. if (strViewName == strTableName && string.IsNullOrWhiteSpace(strViewName))
  106. strSql = strViewSql+ $" where {strColumnName} > '{strColumnValue}'";
  107. else
  108. strSql = $"select * from {strTableName} where {strColumnName} > '{strColumnValue}'";
  109. DataTable dt = GetDataTable(strSql, new SqlParameter[] { });
  110. Dictionary<string, string> dictFiled = GetSpecialOperaField(strTableName);
  111. if (dictFiled.Count > 0)
  112. dtReturn = DateAndTimeTypeOpera(dt, dictFiled);
  113. else
  114. dtReturn = dt;
  115. }
  116. catch (Exception ex)
  117. {
  118. //发生异常,写入日志
  119. AppLog.Error(ex.Message);
  120. throw ex;
  121. }
  122. return dtReturn;
  123. }
  124. public static Dictionary<string, DataTable> GetAllTableNameAndStructure()
  125. {
  126. Dictionary<string, DataTable> dictTables = new Dictionary<string, DataTable>();
  127. try
  128. {
  129. string sql = "";
  130. DataTable TablesName = GetDataTable("SELECT name FROM SysObjects Where XType='U' or XType='V' ORDER BY Name", new SqlParameter[] { });//得到所有表
  131. foreach (DataRow dr in TablesName.Rows)
  132. {
  133. string strTableName = dr[0].ToString();
  134. sql = string.Format("SELECT * FROM [{0}] where 1=0", strTableName); //查询字符串
  135. dictTables.Add(strTableName.ToUpper(), GetDataTable(sql, new SqlParameter[] { }));
  136. }
  137. }
  138. catch (Exception ex)
  139. {
  140. //发生异常,写入日志
  141. AppLog.Error(ex.Message);
  142. //throw ex;
  143. }
  144. return dictTables;
  145. }
  146. public static bool TestSQLServerLink()
  147. {
  148. bool bIfSuccess = false;
  149. using (SqlConnection conn = new SqlConnection(connectionStr))
  150. {
  151. try
  152. {
  153. conn.Open();
  154. bIfSuccess = true;
  155. }
  156. catch (Exception ex)
  157. {
  158. //这里写日志
  159. bIfSuccess = false;
  160. AppLog.Error(ex.Message);
  161. }
  162. }
  163. return bIfSuccess;
  164. }
  165. /// <summary>
  166. /// 获取所有数据字段,然后记录其中是否存在需要特殊处理的字段
  167. /// </summary>
  168. /// <returns></returns>
  169. private static Dictionary<string, string> GetSpecialOperaField(string strTableName)
  170. {
  171. Dictionary<string, string> DictFiled = new Dictionary<string, string>();
  172. DataTable dt = new DataTable();
  173. try
  174. {
  175. string sql = string.Format("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='{0}'", strTableName); //查询字符串
  176. dt = GetDataTable(sql, new SqlParameter[] { });
  177. foreach (DataRow dr in dt.Rows)
  178. {
  179. if (dr["data_type"].ToString().ToLower() == "date" || dr["data_type"].ToString().ToLower() == "time")
  180. {
  181. DictFiled.Add(dr["column_name"].ToString(), dr["data_type"].ToString());
  182. }
  183. }
  184. }
  185. catch (Exception ex)
  186. {
  187. //发生异常,写入日志
  188. AppLog.Error(ex.Message);
  189. }
  190. return DictFiled;
  191. }
  192. /// <summary>
  193. /// 获取数据时,单独处理某些(Date和Time)类型数据,并把数据类型转换为字符串类型
  194. /// </summary>
  195. private static DataTable DateAndTimeTypeOpera(DataTable dt, Dictionary<string, string> DictSpecialField)
  196. {
  197. DataTable dtNewFormat = new DataTable();
  198. //添加列
  199. foreach (DataColumn dc in dt.Columns)
  200. {
  201. if (DictSpecialField.ContainsKey(dc.ColumnName))
  202. {
  203. string strDateType = DictSpecialField[dc.ColumnName];
  204. switch (strDateType.ToUpper())
  205. {
  206. case "DATE":
  207. case "TIME":
  208. dtNewFormat.Columns.Add(dc.ColumnName, typeof(string)); //使用字符串来存储该字段,而不是采用它的数据库格式(C#无法区分Date, Time,DateTime,前两种格式会自动补充数据,导致数据的不准确)
  209. break;
  210. default:
  211. dtNewFormat.Columns.Add(dc.ColumnName, dc.DataType);
  212. break;
  213. }
  214. }
  215. else
  216. {
  217. dtNewFormat.Columns.Add(dc.ColumnName, dc.DataType);
  218. }
  219. }
  220. //添加数据行
  221. foreach (DataRow dr in dt.Rows)
  222. {
  223. DataRow drNewRow = dtNewFormat.NewRow();
  224. foreach (DataColumn dc in dtNewFormat.Columns)
  225. {
  226. if (!DictSpecialField.ContainsKey(dc.ColumnName))
  227. drNewRow[dc.ColumnName] = dr[dc.ColumnName];
  228. else
  229. {
  230. switch (DictSpecialField[dc.ColumnName].ToUpper())
  231. {
  232. case "DATE":
  233. if (dr[dc.ColumnName] != null && dr[dc.ColumnName].ToString() != "")
  234. drNewRow[dc.ColumnName] = Convert.ToDateTime(dr[dc.ColumnName]).ToString("yyyy-MM-dd");
  235. break;
  236. case "TIME":
  237. if (dr[dc.ColumnName] != null && dr[dc.ColumnName].ToString() != "")
  238. drNewRow[dc.ColumnName] = Convert.ToDateTime(dr[dc.ColumnName].ToString()).ToString("HH:mm:ss");
  239. break;
  240. default:
  241. drNewRow[dc.ColumnName] = dr[dc.ColumnName];
  242. break;
  243. }
  244. }
  245. }
  246. dtNewFormat.Rows.Add(drNewRow);
  247. }
  248. //返回数据
  249. return dtNewFormat;
  250. }
  251. }
  252. }