数据读取(SQL)与文本写入(fileStream)
要求:从三个不同服务器中取数,对最近10的历史数据进行去重,写出到文本。
1.读取。
1 public static DataTable ExecuteSql(string connectString, string querySqlString) 2 { 3 DataTable dt = new DataTable(); 4 using (SqlConnection conn = new SqlConnection(connectString)) 5 { 6 conn.Open(); 7 SqlCommand cmd = conn.CreateCommand(); 8 cmd.CommandText = querySqlString; 9 using (SqlDataAdapter adapter = new SqlDataAdapter(cmd)) 10 { 11 adapter.SelectCommand.CommandTimeout = 60 * 30; 12 adapter.Fill(dt); 13 return dt; 14 } 15 } 16 }
当然,另外还有一种,定义了一个我要使用的类型,返回List<T>:
1 public static List<MarketUrl> GetUrlListFromDataBase(string serverName, string sqlString) 2 { 3 List<MarketUrl> list = new List<MarketUrl>(); 4 MarketUrl mu = new MarketUrl(); 5 string connectStr = ConfigurationManager.ConnectionStrings[serverName].ConnectionString; 6 using (SqlConnection conn = new SqlConnection(connectStr)) 7 { 8 conn.Open(); 9 SqlCommand cmd = conn.CreateCommand(); 10 cmd.CommandText = sqlString; 11 cmd.CommandTimeout = 60 * 30; 12 SqlDataReader reader = cmd.ExecuteReader(); 13 while (reader.Read()) 14 { 15 var dr = new MarketUrl() 16 { 17 market = reader.GetString(reader.GetOrdinal("MarketCode")), 18 url = reader.GetString(reader.GetOrdinal("Url")) 19 }; 20 list.Add(dr); 21 } 22 } 23 return list; 24 }
2.去重(我的思路是,在取数的时候,对各自的data select 的时候先进行distinct,然后三个data merge到一起时,再次duplicate):
1 //colmuns 是distinct的 数组,为columnName 2 public static DataTable GetDistinctRow(DataTable dt, string[] columns) 3 { 4 DataView dv = dt.DefaultView; 5 DataTable dtDistinct = dv.ToTable(true, columns); 6 return dtDistinct; 7 }
3.DataRows ConvertTo DataTable
1 //这是个额外用的到操作,先记下 2 public static DataTable ConvertToDataTable(DataRow[] rows) 3 { 4 if (rows == null || rows.Count() < 1) 5 return null; 6 DataTable dtResult = rows[0].Table.Clone(); 7 foreach (DataRow r in rows) 8 { 9 dtResult.Rows.Add(r.ItemArray); 10 } 11 return dtResult; 12 }
4.写入到文本,因code还涉及到别的一些操作,这里只写最简单部分:
1 StringBuilder sb = new StringBuilder(); 2 foreach (DataRow row in dt.Rows) 3 { 4 sb.AppendLine(dateString + " " + row[0].ToString() + " " + row[1].ToString()); 5 } 6 using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write)) 7 { 8 using (TextWriter tw = new StreamWriter(fs, Encoding.Default)) 9 { 10 tw.Write(sb.ToString()); 11 } 12 } 13 File.WriteAllText(logPath, "[" + DateTime.UtcNow + "] Successed...\r\n"); 14
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!