2017-08-17 57 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