C# 在对两个数据库执行并集并对其应用某些条件时,如何绑定Gridview?

C# 在对两个数据库执行并集并对其应用某些条件时,如何绑定Gridview?,c#,asp.net,sql,sql-server,gridview,C#,Asp.net,Sql,Sql Server,Gridview,我有一个表名dbo.EmpInfo,有4列 1-UserId 2-SubUserId 3-Year 4-Status 1-UserId 2-SubUserId 3-Year 4-Status 我有另一个数据库名为dbo.EmpInfo1的表,它有4列 1-UserId 2-SubUserId 3-Year 4-Status 1-UserId 2-SubUserId 3-Year 4-Status UserId可能在两个表中重复 现在我必须从Status=Success和Status co

我有一个表名dbo.EmpInfo,有4列

1-UserId 2-SubUserId 3-Year 4-Status
1-UserId 2-SubUserId 3-Year 4-Status
我有另一个数据库名为dbo.EmpInfo1的表,它有4列

1-UserId 2-SubUserId 3-Year 4-Status
1-UserId 2-SubUserId 3-Year 4-Status
UserId可能在两个表中重复

现在我必须从Status=Success和Status count小于10的两个表中找到这些UserId,并在Gridview中绑定这些值

例如,我有一个用户IDmayank@gmail.com在dbo.EmpInfo中,它的状态计数为5Status=Success,在dbo.EmpInfo1中,它的状态计数为7,因此两个表中的mayank@gmail.com是12,所以我们必须在Gridview中绑定这个用户ID。和具有上述所有列的Gridview

我有一个程序-

ALTER proc [dbo].[sp_countUserDetails]
as
begin try
begin transaction
Select distinct(UserId) from EmpInfo where Status='Success' 
union all
Select distinct(UserId) from MyDB.dbo.EmpInfo1 where Status='Sucess'
commit transaction
end try
在我的.cs文件中,我使用了

SqlDataReader dr = ms.sp_SelectExecuter("sp_countUserDetails");

    DataTable dt = new DataTable();
    dt.Load(dr);
    foreach (DataRow DR in dt.Rows)
    {
        ms = new MethodStore();
        ms.sp_SelectExecuter("sp_usercount", "@userid", (DR["UserId"]).ToString()); 
    }
程序是-

ALTER Procedure [dbo].[sp_usercount]
@userid varchar(50)
as
declare @count1213 dec =0, @count1314 dec =0;
begin try
begin transaction
select @count1314= count(UserId) from EmpInfo where Status='Status' and      UserID=@userid;
select @count1213= count(UserId) from MyDB.dbo.EmpInfo1 where Status='Success' and UserID=@userid;
select @count1213+@count1314 as 'Count'
if((@count1213+@count1314)>=10)
insert into MyTaxCafe.dbo.demo values (@userid);
commit transaction
end try
bt表dbo.demo不包含不同的UserId..,因为我们的过程

[dbo].[sp_countUserDetails]

从两个表中给出不同的值,但由于联合存在冗余,我们可以控制它吗,因为两个表中可能存在相同的用户ID

首先,您需要一个SQL来查询两个数据库,您可以这样尝试

SELECT Status FROM [database1].[dbo].[TableName] AS t1 INNER JOIN [database2].[dbo].[TableName] AS t2
ON (t1.UserId = t2.UserId)
WHERE Status='Success'
GROUP BY Status
Having COUNT(Status) < 10
在C代码中,使用SqlDataAdapter填充DataTable,
然后设置DataGridView的字段DataSource=DataTable,您必须从查询中使用union来获得预期结果。 两个表中的列相同,因此可以使用union而不做任何更改 比如说

select * (select * from TableName1
where Status = 'Success'

union

select * from TableName2
where Status = 'Success'
) A

where count(Status)<10
group by SubUserId, Year, Status

试试这个。

请发布您迄今为止尝试过的内容,您的最终输出将具有相同的列名,因此对于gridview来说这无关紧要。但要获得每一行的唯一id,因为您说过UserID可能会在两个表中重复,所以您需要在SELECT语句中通过SELECT 0在PARTITION BY customer ORDER上添加行号,以获得每一行的唯一id。为此,您可以在哈希表中转储结果,然后从该表中选择,并在该选择中添加上述行。@AbeMiessler这是我的代码。.它只给出具有相同用户ID的结果,但在我的两个表中,用户ID可能相同,也可能不同。。