[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.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.여러 테이블과 데이터 집합을 작성하는 것은 데이터베이스에 여러 요청을 전송하여 수행 할 수 있습니다, 또는 더 빠른 방법 : 여러 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.그것은 오래된 주제이지만, 어떤 사람들을 위해 유용 할 수 있습니다 :
그것은 오래된 주제이지만, 어떤 사람들을 위해 유용 할 수 있습니다 :
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.여기에 귀하의 질문에 아주 좋은 대답은
여기에 귀하의 질문에 아주 좋은 대답은
MSDN 페이지 이상에 언급 한 예를 참조하십시오 -
-
==============================
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.
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.
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.
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 ! "); }
from https://stackoverflow.com/questions/11345761/how-to-fill-dataset-with-multiple-tables by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 서버의 순열을 생성하는 가장 우아한 방법 (0) | 2020.05.03 |
---|---|
[SQL] 어떻게 CASE 표현식은 ELSE 절에 도달 하는가? (0) | 2020.05.03 |
[SQL] JDBC에서 누락 dll을 (0) | 2020.05.03 |
[SQL] 왼쪽은 내부에 회전이 조인 (0) | 2020.05.03 |
[SQL] SQL 서버 : 드롭 테이블 캐스케이드 동등한? (0) | 2020.05.03 |