求助.c# 数据集之间的对比.弄明白再加分.

我有两个dataset分别是dsA,dsB.两个数据集的结构是相同的,只是数据不相同.dsA是新表,而dsB是旧的.我可以用什么方法得出,根据其中某两个字段(比如是Ite... 我有两个dataset分别是dsA,dsB.
两个数据集的结构是相同的,只是数据不相同.
dsA是新表,而dsB是旧的.

我可以用什么方法得出,根据其中某两个字段(比如是ItemArray[1],ItemArray[2])
筛选dsA中有,但dsB中没有的数据,并保存到另外一个dsC的数据集中?
(大概功能就是筛选出dsA中的新数据).
其实这里是两个不同服务器的两个SQL数据库,原来也想过直接用sql的not in联查,但是没有思路和方法.如果有这方面的知识,欢迎也说说.
展开
 我来答
bjddd192
2010-09-14 · TA获得超过416个赞
知道小有建树答主
回答量:496
采纳率:0%
帮助的人:430万
展开全部
给你写了个Demo,记得给分哦,^_^
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
DataTable dtA = new DataTable();
DataColumn col = new DataColumn("H", typeof(int));
dtA.Columns.Add(col);
col = new DataColumn("I", typeof(string));
dtA.Columns.Add(col);
DataTable dtB = dtA.Clone();

DataRow dr = dtA.NewRow();
dr.BeginEdit();
dr["H"] = 0;
dr["I"] = "0";
dr.EndEdit();
dtA.Rows.Add(dr);

dr = dtA.NewRow();
dr.BeginEdit();
dr["H"] = 1;
dr["I"] = "1";
dr.EndEdit();
dtA.Rows.Add(dr);

dr = dtB.NewRow();
dr.BeginEdit();
dr["H"] = 1;
dr["I"] = "1";
dr.EndEdit();
dtB.Rows.Add(dr);

dr = dtB.NewRow();
dr.BeginEdit();
dr["H"] = 2;
dr["I"] = "2";
dr.EndEdit();
dtB.Rows.Add(dr);

DataTable dtC = dtA.Clone();
foreach (DataRow row in dtA.Rows)
{
//查看A在B中是否存在
DataRow[] rows = dtB.Select(string.Format("H={0} and I='{1}'", row["H"].ToString(), row["I"].ToString()));
if (rows.Length == 0)
{
dtC.ImportRow(row);
}
}
}
}
}

SQL Server跨数据库连接

-- 设置用户名与密码
EXEC sp_addlinkedsrvlogin
@rmtsrvname = 'F6' , --Server Name
@useself = 'false' ,
@locallogin = NULL ,
@rmtuser = 'sa' , --User
@rmtpassword = 'sasa' --Password

-- 查询当前有多少个 DBLINK
select * from sys.servers

-- 查询登陆用户
select * from sys.linked_logins

--查询 DBLINK 的数据, 也就是另外一台 SQL Server 的数据。
select * from [F6].[database].[dbo].[table]
450475281
2010-09-12 · TA获得超过115个赞
知道答主
回答量:276
采纳率:0%
帮助的人:146万
展开全部
加入你有一个数据库名为Database

你可以先将dsA的数据导入到Database,然后再导入dsB的数据到Database
因为两个ds的数据结构相同,所以在导入第二个的时候就开始判断数据库中是否存在dsB中的信息,如果有就记录下来,就是你所说的dsB中有,dsA 中没有的数据,这样显示出来的数据就不会有重复,不知道能不能完成
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
陈学阳
2010-09-13 · TA获得超过2.8万个赞
知道大有可为答主
回答量:2.1万
采纳率:14%
帮助的人:5425万
展开全部
VC++6.0编译、调试都成功,文件需要保存为后缀*.CPP才可以,保存C编译不通过,碰到一件怪事情。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define LIST_INIT_SIZE 100
#define LIST_INCREMENT 10
#define ERROR -1
#define OK 1
#define ElemType int

typedef struct{
ElemType *elem;
int length;
int listsize;
}SqList;

int InitList(SqList &L)
{
L.elem = (ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem)
{
printf("内存溢出\n");
return ERROR;
}
L.length = 0;
L.listsize = LIST_INIT_SIZE;
return OK;
}

int CreatList(SqList &L)
{
ElemType *p;
int data;
char str[64];
printf("请输入顺序表的整数数据:");
scanf("%s", str);
printf("\n");

while(strcmp(str, "#") != 0)
{
data = atoi(str);
p = &L.elem[L.length];
*p = (ElemType)data;
L.length ++;
printf("下一数据,'#'表示结束:");
scanf("%s", str);
printf("\n");
}
return OK;
}

int InsertList(SqList &L, int i, ElemType e)
{
ElemType *newbase, *q, *p;
if(i < 1 || i > L.length + 1)
{
printf("输入的顺序表位置不对\n");
return ERROR;
}
if(L.length >= L.listsize)
{
newbase = (ElemType *)realloc(L.elem, (L.listsize + LIST_INCREMENT)*sizeof(ElemType));
if(!newbase)
{
printf("内存溢出\n");
return ERROR;
}

L.elem = newbase;
L.listsize += LIST_INCREMENT;
}
q = &(L.elem[i - 1]);
if(L.length > 0)
for(p = &(L.elem[L.length - 1]); p >= q; --p) *(p+1) = *p;
*q = e;
++L.length;
return OK;
}

int DeleteList(SqList &L, int i, ElemType &e)
{
ElemType *q,*p;
if((i < 1) || (i > L.length))
{
printf("输入的顺序表位置不对\n");
return ERROR;
}

p = &L.elem[i -1];
e = *p;
q = L.elem + L.length - 1;
for(++p; p <= q; ++p) *(p - 1) = *p;
L.length--;
return OK;
}

int PrintList(SqList &L)
{
ElemType *p,*q;
int len = 0;
q = &L.elem[L.length - 1];
printf("顺序表长度:%d\n", L.length);
printf("顺序表数据: " );
if(L.length > 0)
{
for(p = &L.elem[0]; p <= q; p ++) printf("%d ", *p);
}
printf("\n");

return OK;
}

void print()
{
printf("输入括号里数字选择程序功能:\n");
printf("[1] 建顺序表\n");
printf("[2] 插入表元素\n");
printf("[3] 删除表元素\n");
printf("[4] 打印顺序表\n");
printf("[#] 结束\n");
}

void main()
{
char ch;
int pos, data;
SqList la;
ElemType e;

la.length = 0;
la.listsize = LIST_INIT_SIZE;
InitList(la);
print();
scanf("%c", &ch);

while(ch != '#')
{
switch(ch)
{
case '1':
CreatList(la);
print();
break;
case '2':
printf("输入插入在顺序表的位置:");
scanf("%d", &pos);
printf("输入插入在顺序表的整数数据:");
scanf("%d", &data);
InsertList(la, pos, (ElemType)data);
print();
break;
case '3':
printf("输入插入在顺序表的位置:");
scanf("%d", &pos);

DeleteList(la, pos, e);
printf("顺序表删除的数据: %d\n", (ElemType)e);
print();
break;
case '4':
PrintList(la);
print();
break;
}
scanf("%c", &ch);
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dong1dong1_80
2010-09-13 · 超过44用户采纳过TA的回答
知道小有建树答主
回答量:117
采纳率:0%
帮助的人:112万
展开全部
dsA,dsB 分别保存到2个数组中(可以使多维数组)

然后循环遍历dsA中的数据,判断是否是新数据。如果是新数据,就执行相关操作。

这样数据库的负担小一点,SELECT到数组中后就可以关闭,另外由于是2个不同的数据连接,这样操作也比较省事。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ghchg8
2010-09-12
知道答主
回答量:36
采纳率:0%
帮助的人:13.7万
展开全部
楼主说的不就是左外连接嘛
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tanzhijian1030
2010-09-12 · 超过10用户采纳过TA的回答
知道答主
回答量:39
采纳率:0%
帮助的人:17.9万
展开全部
不知道您学过《数据库系统概论》了没,哪里有你须有的方法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式