【发布时间】:2017-11-21 21:05:24
【问题描述】:
我正在尝试使用 C# 比较两个 SQL 数据库。 我将第一个数据库中的字段列表存储在一个两列列表中。 我将如何将一个列表中的两列匹配到另一列?两个数据库都输出具有完全相同以下两列(CustNo、CustName)的列表。
CustNo 是主键,所以我想遍历所有 CustNo 字段并查找 CustName 是否已更改。
using static ESLBlackBox.MasterReport;
class Program
{
static void Main(string[] args)
{
Program program = new Program();
var changed = program.ReadNewMasterReport()
.Where(b => program.ReadOldMasterReport()
.Any(a => a.custNo == b.custNo && a.custName != b.custName))
.ToList();
Console.WriteLine(changed);
}
public List<Fields> ReadOldMasterReport()
{
SqlDataReader rdr = null;
SqlConnection conn = new SqlConnection("Data Source=ESLAXSQLDEV1;Initial Catalog=ESLBlackBox;Integrated Security=True");
SqlCommand cmd = new SqlCommand("select * from Master_Report", conn);
List<Fields> oldResult = new List<Fields>();
try
{
using (conn)
{
conn.Open();
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader != null && reader.Read())
{
oldResult.Add(new Fields
{
custNo = Convert.ToString(reader["Service Address Cust No"]),
custName = Convert.ToString(reader["Service Address Acct Name"])
});
}
}
}
}
finally
{
if (rdr != null)
{
rdr.Close();
}
if (conn != null)
{
conn.Close();
}
}
return oldResult;
}
MasterReport 类
class MasterReport
{
public class Fields
{
public string custNo { get; set; }
public string custName { get; set; }
}
}
【问题讨论】:
-
你想在 DB 中还是在内存中这样做?
-
可能在内存中。什么会更快?我们可能会迭代超过 100,000 行。
-
你错了!您的类(字段)有两个属性,因此它代表表中的一行。在您的循环中,您应该将两列分配到您正在创建的新对象的同一个实例中。
-
如果这两个数据库在同一台服务器上,那么您可以使用跨数据库连接进行比较。这比在内存中这样做要快得多
-
@Steve 是的,数据库在同一台服务器上。
标签: c# sql list sqldatareader