[SQL] C #에서 저장된 프로 시저에서 여러 레코드를 반환
SQLC #에서 저장된 프로 시저에서 여러 레코드를 반환
전 C #으로 ASP 고전적인 시스템을 변환하는 데
나는 (전달 된 매개 변수에 따라) 7 개 레코드까지 반환 할 수 있습니다 저장 프로 시저가 있습니다.
나는 여러 SQL 문을 실행하고 여러 어댑터를 사용할 필요없이 그것의 끝에 도착하면 다음의 DataTable을 건너 뛰는,이 단순히 루프 무엇을 내가 할 수있는 개별 DataTables으로 모든 레코드를 반환 할 수있는 방법을 알 필요가있다. 데이터 집합으로 각 테이블을 추가 할 수있는 문을 입력합니다.
고전에서는 간단한 할 일 동안 내가 다음 문으로 이동 루프의 끝에있어 objRS.NextRecordset ()하지 objRS.EOF 루프.
나는 현재 다시 종료 코드의 총 재 작성을 필요로하지 않습니다를 사용할 수 있습니다 무엇인가?
각 레코드는 열과 행의 다른 번호를 가지고있다. 그들은 서로 관련이없는. 우리는 트래픽을 줄이기 위해 저장된 프로 시저의 여러 레코드를 반환합니다.
예를 들면 좋을 것이다.
감사
해결법
-
==============================
1.
SqlConnection con=new SqlConnection("YourConnection String"); SqlCommand cmd=new SqlCommand(); SqlDataAdapter da=new SqlDataAdapter(); DataSet ds = new DataSet(); cmd = new SqlCommand("name of your Stored Procedure", con); cmd.CommandType = CommandType.StoredProcedure; //cmd.Parameters.AddWithValue("@SuperID", id);//if you have parameters. da = new SqlDataAdapter(cmd); da.Fill(ds); con.Close();
이 후에는 사용하여 다른 (7) 레코드를 활용할 수 있습니다
ds.Tables[0] ds.Tables[1] ds.Tables[2] ds.Tables[3] ds.Tables[4] ds.Tables[5] ds.Tables[6]
-
==============================
2.당신이 SqlDataAdapter.Fill를 (사용하여 데이터 집합을 채울 경우) 방법은 저장 프로 시저에서 반환 된 레코드 집합의 각 데이터 집합 내에서 DataTable을 반환한다
당신이 SqlDataAdapter.Fill를 (사용하여 데이터 집합을 채울 경우) 방법은 저장 프로 시저에서 반환 된 레코드 집합의 각 데이터 집합 내에서 DataTable을 반환한다
DataSet dataset = new DataSet(); using (var adapter = new SqlDataAdapter("yourStoredProcedure", yourConnectionString)) { adapter.SelectCommand.CommandType = CommandType.StoredProcedure; adapter.Fill(dataset); } for (int i = 0; i < dataset.Tables.Count; i++) { // Do something for each recordset }
당신은 SqlDataReader 개체를 사용하는 경우, 사용은 다음 레코드에 사전에 SqlDataReader.NextResult () 메소드를 사용할 수 있습니다 :
using (var connection = new SqlConnection(yourConnectionString)) using (var command = new SqlCommand("yourStoredProcedure")) { connection.Open(); using (var reader = command.ExecuteReader()) { while (reader.Read()) { // do something with first result set; } if (reader.NextResult()) { while (reader.Read()) { // do something with second result set; } } else { return; } if (reader.NextResult()) { while (reader.Read()) { // do something with third result set; } } else { return; } } }
-
==============================
3.이것은 당신이 필요로하는 모든 돌아갑니다
이것은 당신이 필요로하는 모든 돌아갑니다
using (SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString)) { using (SqlCommand cmd = new SqlCommand()) { cmd.CommandText = "yoursp"; cmd.Connection = conn; cmd.CommandType = CommandType.StoredProcedure; conn.Open(); SqlDataAdapter adapter = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); adapter.Fill(ds); conn.Close(); } }
-
==============================
4.박사는 사용하여 더 이상 레코드 또는 전혀없는 경우 확인할 수있는 경우 (dr.NextResult ())
박사는 사용하여 더 이상 레코드 또는 전혀없는 경우 확인할 수있는 경우 (dr.NextResult ())
dr.read 다시 다음 루프
이 시도
string connStr = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString; SqlConnection Con = new SqlConnection(connStr); try { string str1 = "select productid,productname from products;select VendorFName from vendor"; SqlCommand com = new SqlCommand(str1, Con); com.Connection.Open(); SqlDataReader dr = com.ExecuteReader(); DropDownList1.Items.Add("Select Product Id"); DropDownList2.Items.Add("Select Vendor Name"); while(dr.Read()) { DropDownList1.Items.Add(dr.GetValue(0).ToString()); } if (dr.NextResult()) { while (dr.Read()) { DropDownList2.Items.Add(dr.GetValue(0).ToString()); } } } catch (Exception ex) { } finally { if (Con.State == ConnectionState.Open) { Con.Close(); } }
from https://stackoverflow.com/questions/18510901/return-multiple-recordsets-from-stored-proc-in-c-sharp by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 내부를 많이 사용하여 쿼리를 개선하는 것은 wp_postmeta, 키 / 값 테이블에 조인 (0) | 2020.07.02 |
---|---|
[SQL] 열 이름을 가져옵니다 (0) | 2020.07.02 |
[SQL] 서열 값에 의해 그룹 (0) | 2020.07.02 |
[SQL] SQLite는 날짜를 비교 (0) | 2020.07.02 |
[SQL] 오라클 SQL Developer를 사용하여 텍스트 파일에 CLOB 내보내기 (0) | 2020.07.02 |