数据读取(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 
复制代码

 

posted @   肖恩部落  阅读(839)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 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 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
点击右上角即可分享
微信分享提示