在 C# 中比较两个数据集

发布于 2024-07-30 06:21:00 字数 2018 浏览 3 评论 0原文

我有两个数据集,我需要比较这两个数据集,这样如果一个表中不存在 ID,那么我需要编写插入查询,否则更新查询。

例如:

Id in One dataset        ID in second Dataset       
1                          1
2                          2
3                          4

我需要将 ID 3 插入到第二个数据集。

这是我的代码供您参考:

if (ds.Tables[0].Rows.Count > 0 || clientDS.Tables[0].Rows.Count > 0)
        {
            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                for (int j = 0; j < clientDS.Tables[0].Rows.Count; j++)
                {
                    if (ds.Tables[0].Rows[i]["Id"].ToString() == clientDS.Tables[0].Rows[j]["Id"].ToString())
                    {
                        client.GetSingleValue("update customers set Name='" + ds.Tables[0].Rows[i]["Name"].ToString() + "',ContactPerson= '" + ds.Tables[0].Rows[i]["ContactPerson"].ToString() + "',Address='" + ds.Tables[0].Rows[i]["Address"].ToString() + "',TinNo='" + ds.Tables[0].Rows[i]["TinNo"].ToString() + "',ContactNo='" + ds.Tables[0].Rows[i]["Contactno"].ToString() + "',Report=  '" + ds.Tables[0].Rows[i]["Report"].ToString() + "',Sync=0,Ids='" + ds.Tables[0].Rows[i]["Id"].ToString() + "' where id='" + ds.Tables[0].Rows[i]["Id"].ToString() + "' ");
                    }
                    else
                    {
                        client.GetSingleValue("insert into customers(id,Name,ContactPerson,Address,TinNo,ContactNo,Report,Sync,Ids) values('" + ds.Tables[0].Rows[i]["Id"].ToString() + "',  '" + ds.Tables[0].Rows[i]["Name"].ToString() + "','" + ds.Tables[0].Rows[i]["ContactPerson"].ToString() + "',  '" + ds.Tables[0].Rows[i]["Address"].ToString() + "',  '" + ds.Tables[0].Rows[i]["TinNo"].ToString() + "',  '" + ds.Tables[0].Rows[i]["Contactno"].ToString() + "',  '" + ds.Tables[0].Rows[i]["Report"].ToString() + "',0,'" + ds.Tables[0].Rows[i]["Id"].ToString() + "')");
                    }
                }
            }
        }  

上面的代码不起作用。 请纠正我的问题。

谢谢

i have two datasets and i need to compare these two datasets such that if ID does not exist in one table then i need to write insert Query else update query.

For Ex:

Id in One dataset        ID in second Dataset       
1                          1
2                          2
3                          4

I need to insert ID 3 to second dataset.

Here is my code for your reference:

if (ds.Tables[0].Rows.Count > 0 || clientDS.Tables[0].Rows.Count > 0)
        {
            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                for (int j = 0; j < clientDS.Tables[0].Rows.Count; j++)
                {
                    if (ds.Tables[0].Rows[i]["Id"].ToString() == clientDS.Tables[0].Rows[j]["Id"].ToString())
                    {
                        client.GetSingleValue("update customers set Name='" + ds.Tables[0].Rows[i]["Name"].ToString() + "',ContactPerson= '" + ds.Tables[0].Rows[i]["ContactPerson"].ToString() + "',Address='" + ds.Tables[0].Rows[i]["Address"].ToString() + "',TinNo='" + ds.Tables[0].Rows[i]["TinNo"].ToString() + "',ContactNo='" + ds.Tables[0].Rows[i]["Contactno"].ToString() + "',Report=  '" + ds.Tables[0].Rows[i]["Report"].ToString() + "',Sync=0,Ids='" + ds.Tables[0].Rows[i]["Id"].ToString() + "' where id='" + ds.Tables[0].Rows[i]["Id"].ToString() + "' ");
                    }
                    else
                    {
                        client.GetSingleValue("insert into customers(id,Name,ContactPerson,Address,TinNo,ContactNo,Report,Sync,Ids) values('" + ds.Tables[0].Rows[i]["Id"].ToString() + "',  '" + ds.Tables[0].Rows[i]["Name"].ToString() + "','" + ds.Tables[0].Rows[i]["ContactPerson"].ToString() + "',  '" + ds.Tables[0].Rows[i]["Address"].ToString() + "',  '" + ds.Tables[0].Rows[i]["TinNo"].ToString() + "',  '" + ds.Tables[0].Rows[i]["Contactno"].ToString() + "',  '" + ds.Tables[0].Rows[i]["Report"].ToString() + "',0,'" + ds.Tables[0].Rows[i]["Id"].ToString() + "')");
                    }
                }
            }
        }  

Above code does not work. Pls rectify my issue.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

秋心╮凉 2024-08-06 06:21:00

使用 Merge 方法:

Dataset2.Merge(Dataset1);

这会将 Dataset1 中但尚未存在于 Dataset2 中的任何记录插入到 Dataset2 中。 注意:您最初的问题表明您需要插入记录或更新 Dataset1 中的匹配记录,但您的评论似乎表明您实际上不需要进行更新。 Merge 方法只会从 Dataset1 插入新记录。

Use the Merge method:

Dataset2.Merge(Dataset1);

This will insert into Dataset2 any records that are in Dataset1 but not already in Dataset2. Note: your original question suggests that you need to insert records or update matching records from Dataset1, but your comments appear to suggest that you don't actually need to do an update. The Merge method will only insert new records from Dataset1.

以为你会在 2024-08-06 06:21:00
DataSet data1
DataSet data2

data1.Merge(data2,true)

会将 data2 合并到 data1 中,不会覆盖具有相同主键的行,并添加 data1 中不存在主键的行。

data1.Merge(data2,false)

将合并 data2data1 覆盖所有行并添加新行

DataSet data1
DataSet data2

data1.Merge(data2,true)

will merge data2 into data1 not overwrite rows with same primary key and add rows with non existing primary key in data1.

data1.Merge(data2,false)

will merge data2 into data1 overwriting all rows and add new rows

古镇旧梦 2024-08-06 06:21:00

我认为您的错误是使用 == 比较 Id 字符串。 尝试使用等于
我只是使用 foreach 并选择:

foreach (DataRow row in ds.Tables[0].Rows)
{
    string filter = string.Format("Id = '{0}'", row["Id"]);
    DataRow[] rows = clientDS.Tables[0].Select(filter);
    if (rows.length == 0)
    {
        // insert here
    }
    else
    {
        // update here
    }
}

I think your error is compaing the Id string using ==. Try using Equals.
I'd just use a foreach and select instead:

foreach (DataRow row in ds.Tables[0].Rows)
{
    string filter = string.Format("Id = '{0}'", row["Id"]);
    DataRow[] rows = clientDS.Tables[0].Select(filter);
    if (rows.length == 0)
    {
        // insert here
    }
    else
    {
        // update here
    }
}
人│生佛魔见 2024-08-06 06:21:00

将这两个表(DataTable 实例)添加到 DataSet 中并添加关系。

数据集 ds = new 数据集();
ds.EnforceConstraints = false;

DataTable dt1 = new DataTable("A");
DataTable dt2 = new DataTable("B");

dt1.Columns.Add("ID", typeof(int));
dt1.PrimaryKey = new DataColumn[] {dt1.Columns[0]};
dt1.Rows.Add(1);
dt1.Rows.Add(2);
dt1.Rows.Add(3);

dt2.Columns.Add("ID", typeof(int));
dt2.Rows.Add(1);
dt2.Rows.Add(2);
dt2.Rows.Add(4);

ds.Tables.Add(dt1);
ds.Tables.Add(dt2);
ds.Relations.Add("ID_REL", dt1.Columns[0], dt2.Columns[0]);

foreach (DataRow r in ds.Tables["A"].Rows)
{
    DataRow []child=r.GetChildRows("ID_REL");
    Console.Write(r[0] + " " );
    if (child.Length != 0)
        Console.WriteLine(child[0][0]);

    Console.WriteLine();
}

Add both these tables (DataTable instances) into a DataSet and add relation.

DataSet ds = new DataSet();
ds.EnforceConstraints = false;

DataTable dt1 = new DataTable("A");
DataTable dt2 = new DataTable("B");

dt1.Columns.Add("ID", typeof(int));
dt1.PrimaryKey = new DataColumn[] {dt1.Columns[0]};
dt1.Rows.Add(1);
dt1.Rows.Add(2);
dt1.Rows.Add(3);

dt2.Columns.Add("ID", typeof(int));
dt2.Rows.Add(1);
dt2.Rows.Add(2);
dt2.Rows.Add(4);

ds.Tables.Add(dt1);
ds.Tables.Add(dt2);
ds.Relations.Add("ID_REL", dt1.Columns[0], dt2.Columns[0]);

foreach (DataRow r in ds.Tables["A"].Rows)
{
    DataRow []child=r.GetChildRows("ID_REL");
    Console.Write(r[0] + " " );
    if (child.Length != 0)
        Console.WriteLine(child[0][0]);

    Console.WriteLine();
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文