如何使用带有单个连接语句的数据适配器填充数据集中的两个表?

时间:2015-04-03 16:20:48

标签: sql ado.net dataset oledb dataadapter

我基本上要做的是运行查询,例如:

 select a.*, b.* 
 from a 
 left outer join b on a.col2 = b.col2 
 where a.col1 = 3

获取一个包含两个表的数据集' a'和' b'填充。

例如,如果查询的返回值是:

a.col1 | a.col2 | b.col2 | b.col3
---------------------------------
3      | 33     | 33     | 1
3      | 33     | 33     | 2

我想要这两张桌子:

a.col1 | a.col2
---------------
3      | 33

b.col2 | b.col3
---------------
33     | 1
33     | 2

是否可以做,或者我需要阅读' a'首先是表格,然后生成查询' b'表过滤a.col2的值?

2 个答案:

答案 0 :(得分:0)

你可以通过Executing multiple SQL statements as one against SQL Server实现这个目标 将您的两个查询都放在字符串变量中,并在第一次查询后放置;

string _query ="select a.* from a where a.col1 = 3; Select b.* form b";  

  using (SqlDataAdapter a = new SqlDataAdapter(_query, connectionString))
    {

        /* Use DataAdapter to fill DataSet*/
        DataSet ds = new DataSet();
        a.Fill(ds);


    }

注意:通过使用以下查询您将获得一个结果集,因为您将两个表连接到一个结果集中

select a.*, b.* 
from a 
 left outer join b on a.col2 = b.col2 
 where a.col1 = 3

答案 1 :(得分:0)

您可以使用存储过程将两个表的结果检索为一个表

将结果存储在一个数据集中,并将其反映到您想要的位置。 //存储过程 创建程序spleftjoin  @i int  如  开始   选择a。,b。   来自a  左外连接b在[a.col2] = [b.col1]上  其中[a.col1] = @i  结束 // i是a.col1的参数 asp.net代码拖动一个文本框,输入a.col1数字和gridview控件和一个按钮。复制按钮控件单击事件的代码  protected void btnLoad_Click(object sender,EventArgs e)     {         if(txtBox.Text =="")         {             Response.Write("请输入数字");         }         其他         {             string cs = ConfigurationManager.ConnectionStrings [" dbcss"]。ConnectionString;             SqlConnection con = new SqlConnection(cs);             SqlDataAdapter da = new SqlDataAdapter(" spleftjoin",con);             da.SelectCommand.CommandType = CommandType.StoredProcedure;             int i = Convert.ToInt32(txtBox.Text);             da.SelectCommand.Parameters.AddWithValue(" @ i",i);             DataSet ds = new DataSet();             da.Fill(DS);             GridView1.DataSource = ds.Tables [0];             GridView1.DataBind();         }     }