복붙노트

[SQL] 어떻게 여러 테이블에 데이터 집합을 채우기 위해?

SQL

어떻게 여러 테이블에 데이터 집합을 채우기 위해?

나는 많은 관계로 하나 둘 테이블이 포함 된 데이터 집합을 채우기 위해 노력하고있어. 나는 이것을 달성하기 위해 DataReader를 사용하고 있습니다 :

    public DataSet SelectOne(int id)
    {
        DataSet result = new DataSet();
        using (DbCommand command = Connection.CreateCommand())
        {
            command.CommandText = "select * from table1";

            var param = ParametersBuilder.CreateByKey(command, "ID", id, null);
            command.Parameters.Add(param);

            Connection.Open();
            using (DbDataReader reader = command.ExecuteReader())
            {
                result.MainTable.Load(reader);
            }
            Connection.Close();
        }
        return result;
    }

하지만 단 하나의 테이블이 가득 있어요. 어떻게 목표를 달성 할 - 두 테이블을 채우기?

나는 가능하면 데이터 어댑터 대신 DataReader를를 사용하고 싶습니다.

해결법

  1. ==============================

    1.http://msdn.microsoft.com/en-us/library/system.data.idatareader.nextresult : 여러 SELECT 문에 하나의 명령을 실행하는 경우 DataReader를 내 다음 결과 집합으로 이동 NextResult 방법을 사용할 수 있습니다. 영문

    http://msdn.microsoft.com/en-us/library/system.data.idatareader.nextresult : 여러 SELECT 문에 하나의 명령을 실행하는 경우 DataReader를 내 다음 결과 집합으로 이동 NextResult 방법을 사용할 수 있습니다. 영문

    나는 울부 짖는 소리를 볼 수있는 방법을 보여줍니다

    public DataSet SelectOne(int id)
    {
        DataSet result = new DataSet();
        using (DbCommand command = Connection.CreateCommand())
        {
            command.CommandText = @"
    select * from table1
    select * from table2
            ";
    
            var param = ParametersBuilder.CreateByKey(command, "ID", id, null);
            command.Parameters.Add(param);
    
            Connection.Open();
            using (DbDataReader reader = command.ExecuteReader())
            {
                result.MainTable.Load(reader);
                reader.NextResult();
                result.SecondTable.Load(reader);
                // ...
            }
            Connection.Close();
        }
        return result;
    }
    
  2. ==============================

    2.여러 테이블과 데이터 집합을 작성하는 것은 데이터베이스에 여러 요청을 전송하여 수행 할 수 있습니다, 또는 더 빠른 방법 : 여러 SELECT 문은 단일 요청에 데이터베이스 서버로 전송 될 수있다. 문제는 여기에 쿼리에서 생성 된 테이블이 자동 이름의 표와 표를 가지고있다. 그러나, 생성 된 테이블의 이름은 데이터 세트에서 사용되어야 이름으로 매핑 할 수있다.

    여러 테이블과 데이터 집합을 작성하는 것은 데이터베이스에 여러 요청을 전송하여 수행 할 수 있습니다, 또는 더 빠른 방법 : 여러 SELECT 문은 단일 요청에 데이터베이스 서버로 전송 될 수있다. 문제는 여기에 쿼리에서 생성 된 테이블이 자동 이름의 표와 표를 가지고있다. 그러나, 생성 된 테이블의 이름은 데이터 세트에서 사용되어야 이름으로 매핑 할 수있다.

    SqlDataAdapter adapter = new SqlDataAdapter(
          "SELECT * FROM Customers; SELECT * FROM Orders", connection);
    adapter.TableMappings.Add("Table", "Customer");
    adapter.TableMappings.Add("Table1", "Order");
    
    adapter.Fill(ds);
    
  3. ==============================

    3.그것은 오래된 주제이지만, 어떤 사람들을 위해 유용 할 수 있습니다 :

    그것은 오래된 주제이지만, 어떤 사람들을 위해 유용 할 수 있습니다 :

            DataSet someDataSet = new DataSet();
            SqlDataAdapter adapt = new SqlDataAdapter();
    
            using(SqlConnection connection = new SqlConnection(ConnString))
            {
                connection.Open();
                SqlCommand comm1 = new SqlCommand("SELECT * FROM whateverTable", connection);
                SqlCommand comm2g = new SqlCommand("SELECT * FROM whateverTable WHERE condition = @0", connection);
                commProcessing.Parameters.AddWithValue("@0", "value");
                someDataSet.Tables.Add("Table1");
                someDataSet.Tables.Add("Table2");
    
                adapt.SelectCommand = comm1;
                adapt.Fill(someDataSet.Tables["Table1"]);
                adapt.SelectCommand = comm2;
                adapt.Fill(someDataSet.Tables["Table2"]);
            }
    
  4. ==============================

    4.여기에 귀하의 질문에 아주 좋은 대답은

    여기에 귀하의 질문에 아주 좋은 대답은

    MSDN 페이지 이상에 언급 한 예를 참조하십시오 -

  5. ==============================

    5.로드를 사용할 때 그렇지 않으면 순서 홀수 테이블이 생략 될 것이다, 명시 적으로 NextResult를 호출해서는 안 DataTable을의 방법로드는 DataReader를에 NextResult를 실행합니다.

    로드를 사용할 때 그렇지 않으면 순서 홀수 테이블이 생략 될 것이다, 명시 적으로 NextResult를 호출해서는 안 DataTable을의 방법로드는 DataReader를에 NextResult를 실행합니다.

    다음은 DataReader를을 사용하여 부하 여러 테이블에 대한 일반적인 솔루션입니다.

    // your command initialization code here
    // ...
    DataSet ds = new DataSet();
    DataTable t;
    using (DbDataReader reader = command.ExecuteReader())
    {
      while (!reader.IsClosed)
      {
        t = new DataTable();
        t.Load(rs);
        ds.Tables.Add(t);
      }
    }
    
  6. ==============================

    6.

    protected void Page_Load(object sender, EventArgs e)
    {
        SqlConnection con = new SqlConnection("data source=.;uid=sa;pwd=123;database=shop");
        //SqlCommand cmd = new SqlCommand("select * from tblemployees", con);
        //SqlCommand cmd1 = new SqlCommand("select * from tblproducts", con);
        //SqlDataAdapter da = new SqlDataAdapter();
    
        //DataSet ds = new DataSet();
        //ds.Tables.Add("emp");
        //ds.Tables.Add("products");
        //da.SelectCommand = cmd;
        //da.Fill(ds.Tables["emp"]);
        //da.SelectCommand = cmd1;
    
        //da.Fill(ds.Tables["products"]);
        SqlDataAdapter da = new SqlDataAdapter("select * from tblemployees", con);
        DataSet ds = new DataSet();
        da.Fill(ds, "em");
        da = new SqlDataAdapter("select * from tblproducts", con);
        da.Fill(ds, "prod");
    
        GridView1.DataSource = ds.Tables["em"];
        GridView1.DataBind();
        GridView2.DataSource = ds.Tables["prod"];
        GridView2.DataBind();
    }
    
  7. ==============================

    7.

    public DataSet GetDataSet()
        {
            try
            {
                DataSet dsReturn = new DataSet();
                using (SqlConnection myConnection = new SqlConnection(Core.con))
                {
                    string query = "select * from table1;  select* from table2";
                    SqlCommand cmd = new SqlCommand(query, myConnection);
                    myConnection.Open();
                    SqlDataReader reader = cmd.ExecuteReader();
                    dsReturn.Load(reader, LoadOption.PreserveChanges, new string[] { "tableOne", "tableTwo" });
                    return dsReturn;
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
    
  8. ==============================

    8.

             string connetionString = null;
            SqlConnection connection ;
            SqlCommand command ;
            SqlDataAdapter adapter = new SqlDataAdapter();
            DataSet ds = new DataSet();
            int i = 0;
            string firstSql = null;
            string secondSql = null;
    
            connetionString = "Data Source=ServerName;Initial Catalog=DatabaseName;User ID=UserName;Password=Password";
            firstSql = "Your First SQL Statement Here";
            secondSql = "Your Second SQL Statement Here";
            connection = new SqlConnection(connetionString);
    
            try
            {
                connection.Open();
    
                command = new SqlCommand(firstSql, connection);
                adapter.SelectCommand = command;
                adapter.Fill(ds, "First Table");
    
                adapter.SelectCommand.CommandText = secondSql;
                adapter.Fill(ds, "Second Table");
    
                adapter.Dispose();
                command.Dispose();
                connection.Close();
    
                //retrieve first table data 
                for (i = 0; i <= ds.Tables[0].Rows.Count - 1; i++)
                {
                    MessageBox.Show(ds.Tables[0].Rows[i].ItemArray[0] + " -- " + ds.Tables[0].Rows[i].ItemArray[1]);
                }
                //retrieve second table data 
                for (i = 0; i <= ds.Tables[1].Rows.Count - 1; i++)
                {
                    MessageBox.Show(ds.Tables[1].Rows[i].ItemArray[0] + " -- " + ds.Tables[1].Rows[i].ItemArray[1]);
    
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Can not open connection ! ");
            }
    
  9. from https://stackoverflow.com/questions/11345761/how-to-fill-dataset-with-multiple-tables by cc-by-sa and MIT license