如何在两个数据库上执行联合并在其上应用某些条件时绑定Gridview?

时间:2014-06-17 05:24:35

标签: c# asp.net sql sql-server gridview

我的表名为dbo.EmpInfo,有4列

1-UserId 2-SubUserId 3-Year 4-Status

我有另一个表(在其他数据库中)名称dbo.EmpInfo1有4列

1-UserId 2-SubUserId 3-Year 4-Status

UserId可能在两个表中重复..

现在我必须从状态=“成功”的两个表中找到那些UserId,并且这个状态计数是< 10并在Gridview中绑定这些值..

对于前 - 我有一个UserId说mayank@gmail.com和dbo.EmpInfo它有状态count = 5(Status =“Success”)而在dbo.EmpInfo1它有状态count = 7所以从两个表中mayank@gmail.com的总数是12,所以我们必须在Gridview中绑定这个userId。和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

表dbo.demo不包含不同的UserId ...因为我们的程序

[dbo].[sp_countUserDetails]

从两个表中给出不同的值,但是由于Union,我们可以控制它的冗余,因为在两个表中可能存在相同的UserId

2 个答案:

答案 0 :(得分:0)

首先你需要一个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

答案 1 :(得分:0)

您必须使用查询中的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

试试这个。