CNAS取数仪器端升级
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

SQLDAL.cs 10KB

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