
正文
数据读取(SQL)与文本写入(fileStream)
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
要求:从三个不同服务器中取数,对最近10的历史数据进行去重,写出到文本。
1.读取。
public static DataTable ExecuteSql(string connectString, string querySqlString)
{
DataTable dt = new DataTable();
using (SqlConnection conn = new SqlConnection(connectString))
{
conn.Open();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = querySqlString;
using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
{
adapter.SelectCommand.CommandTimeout = * ;
adapter.Fill(dt);
return dt;
}
}
}
当然,另外还有一种,定义了一个我要使用的类型,返回List<T>:
public static List<MarketUrl> GetUrlListFromDataBase(string serverName, string sqlString)
{
List<MarketUrl> list = new List<MarketUrl>();
MarketUrl mu = new MarketUrl();
string connectStr = ConfigurationManager.ConnectionStrings[serverName].ConnectionString;
using (SqlConnection conn = new SqlConnection(connectStr))
{
conn.Open();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = sqlString;
cmd.CommandTimeout = * ;
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
var dr = new MarketUrl()
{
market = reader.GetString(reader.GetOrdinal("MarketCode")),
url = reader.GetString(reader.GetOrdinal("Url"))
};
list.Add(dr);
}
}
return list;
}
2.去重(我的思路是,在取数的时候,对各自的data select 的时候先进行distinct,然后三个data merge到一起时,再次duplicate):
//colmuns 是distinct的 数组,为columnName
public static DataTable GetDistinctRow(DataTable dt, string[] columns)
{
DataView dv = dt.DefaultView;
DataTable dtDistinct = dv.ToTable(true, columns);
return dtDistinct;
}
3.DataRows ConvertTo DataTable
//这是个额外用的到操作,先记下
public static DataTable ConvertToDataTable(DataRow[] rows)
{
if (rows == null || rows.Count() < )
return null;
DataTable dtResult = rows[].Table.Clone();
foreach (DataRow r in rows)
{
dtResult.Rows.Add(r.ItemArray);
}
return dtResult;
}
4.写入到文本,因code还涉及到别的一些操作,这里只写最简单部分:
StringBuilder sb = new StringBuilder();
foreach (DataRow row in dt.Rows)
{
sb.AppendLine(dateString + " " + row[].ToString() + " " + row[].ToString());
}
using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
7 {
using (TextWriter tw = new StreamWriter(fs, Encoding.Default))
{
tw.Write(sb.ToString());
}
}
File.WriteAllText(logPath, "[" + DateTime.UtcNow + "] Successed...\r\n");







