2017-08-17 56 views
0

我目前正在使用Dapper将来自Sql Server的数据显示到文本框中。我有这两个表:使用两个不同表中的两条SELECT语句

id | fname | lname | Age 
1 | cal | bla | 100 
2 | vin | bla | 10 

table1的

id | fname | lname | Age 
1 | cal | vin | 50 
2 | calvin | cal | 25 

表2

我的存储过程是这样的:

@Fname nvarchar(50) 
AS 
BEGIN 
SELECT Fname,Lname,Age FROM table1 WHERE [email protected] 
UNION 
SELECT Fname,Lname,Age FROM table2 WHERE [email protected] 
END 

我我中插入表格的第一个名字在文本框中,它会显示lname和年龄。我想结果表包括来自表1 L-NAME和年龄从表2,这样的事情:

id | fname | lname | Age 
1 | calvin | bla | 50 

我的C#功能:

public void Multi(String name) 
    { 
     try 
     { 
      using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlConnectionString"].ConnectionString)) 
      { 
       if (db.State != ConnectionState.Open) 
        db.Open(); 

       DynamicParameters p = new DynamicParameters(); 
       SqlCommand command = new SqlCommand("multi", con); 
       p.Add("@Fname", tb2.Text, 
       DbType.String,ParameterDirection.Input); 

       var multi = con.QueryMultiple("multi", p, commandType: 
       CommandType.StoredProcedure); 
       clients cls = new clients(); 
       cls.C = multi.Read<Client>().ToList(); 
       var cli = multi.Read<clients>().ToList(); 
       SqlDataReader reader = command.ExecuteReader(); 
       while (reader.Read()) 
       { 
        cls.C.Add(new Client() 
        { 
         Fname = (String)reader["Fname"], 
         Lname = (String)reader["Lname"], 
         Age = (int)reader["Age"] 
        }); 
        tb2.Text = cls.C[0].Fname; 
        tb3.Text = cls.C[0].Lname; 
        tb4.Text = cls.C[0].Age.ToString(); 

和客户端类:

class Client 
    { 
    public string Fname { get; set; } 
    public string Lname { get; set; } 
    public int Age { get; set; } 
    } 
    class clients 
    { 
    public List<Client> C = new List<Client>(); 
    } 

我m得到这些错误:

1-Procedure or function 'multi' expects parameter '@Fname', which was not 
supplied. 
2-The reader has been disposed; this can happen after all data has been 
consumed Object name: 'Dapper.SqlMapper+GridReader'. 
3- An explicit value for the identity column in table 'CloneInfo' can only 
be specified when a column list is used and IDENTITY_INSERT is ON. 

我指着上读者光标和它说空,并且执行脱落

答: 伊夫添加这和它完美的作品:

DynamicParameters p = new DynamicParameters(); 
       p.Add("@Fname", tb2.Text); 
       var multi = con.QueryMultiple("multi", p, commandType: CommandType.StoredProcedure); 

       clients cls = new clients(); 
       clients cls2 = new clients(); 

       cls.C = multi.Read<Client>().ToList(); 
       cls2.C = multi.Read<Client>().ToList(); 

       tb2.Text = cls.C[0].Fname; 
       tb3.Text = cls.C[0].Lname; 
       tb4.Text = cls2.C[0].Age.ToString(); 

       if (db.State != ConnectionState.Closed) 
        db.Close();.C[0].Age.ToString(); 
+0

联盟所有?你在寻找? –

+2

mysql <> sqlserver – scsimon

+0

@KannanKandasamy它也没有工作。我试图从两个不同的表中获取两个不同的记录,并使用多条select语句在窗体中显示 – Calvin

回答

0

使用SQL语句:

@Fname nvarchar(50) 
AS 
BEGIN 
if ((select count(*) from table1 where [email protected]) > 0) 
begin 
    select t1.Fname, t1.Lname, t2.Age 
    from table1 as t1 
    left join table2 as t2 on t1.Fname == t2.Fname 
    where t1.Fname = @Fname 
end 
else 
begin 
    select t2.Fname, t1.Lname, t2.Age 
    from table2 as t2 
    left join table1 as t1 on t2.Fname == t1.Fname 
    where t2.Fname = @Fname 
end 
+0

它仍然给出:过程或函数'multi'需要参数'@Fname',它没有提供。 – Calvin

+0

这是无效的sql。你缺少一个创建过程,你不能在tsql中使用==。不太确定这甚至试图完成什么。 –

+0

我知道我修改了所有的错误。我想我坚持我的原始sp – Calvin