데이터 리더의 다중 테이블
제가 평소에.DataSet
매우 유연하기 때문입니다.최근에 코드 최적화 작업을 할당 받았습니다. 데이터베이스에 대한 히트를 줄이기 위해 절차에 따라 두 개의 쿼리를 변경합니다.one Query는 다음을 반환합니다.count
그리고 다른 하나는 그것을 돌려줍니다.actual data
. 즉, 나의stored procedure
테이블 두 개를 반환합니다.이제, 저는 두 표를 어떻게 읽는지 압니다.DataSets
, 하지만 나는 두 테이블 모두를 사용해서 읽어야 합니다.DataReader
. 그것을 찾아 나는 이것을 찾았습니다.
저는 기사를 따라 제 코드를 이렇게 적었습니다.
dr = cmd.ExecuteReader();
while (dr.Read())
{
}
if (dr.NextResult()) // this line throws exception
{
while (dr.Read())
{
하지만 저는 dt에서 예외를 받고 있습니다.다음 결과.예외는 다음과 같습니다.
Invalid attempt to call NextResult when reader is closed.
위의 오류도 구글에서 검색했지만 여전히 문제를 해결할 수 없습니다.어떤 도움이라도 주시면 감사하겠습니다.여러 개의 테이블을 읽어야 합니다.datareader
, 이것이 가능합니까?
작업이 끝나면 연결, 데이터 판독기 및 명령이 닫히므로 데이터 판독기 근접 예외가 발생하지 않습니다.
또한 이렇게 체크해보세요.if(reader.NextResult())
다음 결과가 있는지 확인하기 위해,
using (SqlConnection connection = new SqlConnection("connection string here"))
{
using (SqlCommand command = new SqlCommand
("SELECT Column1 FROM Table1; SELECT Column2 FROM Table2", connection))
{
connection.Open();
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
MessageBox.Show(reader.GetString(0), "Table1.Column1");
}
if(reader.NextResult())
{
while (reader.Read())
{
MessageBox.Show(reader.GetString(0), "Table2.Column2");
}
}
}
}
}
이 문제를 재현하려고 시도했습니다(또한 한 판독기에서 여러 개의 테이블을 사용해 본 적이 없기 때문입니다.하지만 예상대로 작동하니 관련 코드를 누락하신 것 같습니다.
여기 제 테스트 코드가 있습니다.
using (var con = new SqlConnection(Properties.Settings.Default.ConnectionString))
{
using (var cmd = new SqlCommand("SELECT TOP 10 * FROM tabData; SELECT TOP 10 * FROM tabDataDetail;", con))
{
int rowCount = 0;
con.Open();
using (IDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
String object1 = String.Format("Object 1 in Row {0}: '{1}'", ++rowCount, rdr[0]);
}
if (rdr.NextResult())
{
rowCount = 0;
while (rdr.Read())
{
String object1 = String.Format("Object 1 in Row {0}: '{1}'", ++rowCount, rdr[0]);
}
}
}
}
}
저는 프라네 라나의 답변을 최대한 작게 유지하는 것을 좋아하기 때문에 이를 토대로 만들었습니다.
string rslt = "";
using (SqlDataReader dr = cmd.ExecuteReader())
{
do
{
while (dr.Read())
{
rslt += $"ReqID: {dr["REQ_NR"]}, Shpr: {dr["SHPR_NR"]}, MultiLoc: {dr["MULTI_LOC"]}\r\n";
}
} while (dr.NextResult());
}
문제가 오래되었지만 정답이 틀렸다는 것을 알게 되었습니다.다음은 제가 하는 방법입니다.
List<DataTable> dataTables = new();
using IDataReader dataReader = command.ExecuteReader();
do
{
DataTable dataTable = new();
dataTable.Load(dataReader);
dataTables.Add(dataTable);
}
while (!dataReader.IsClosed);
언급URL : https://stackoverflow.com/questions/12969318/multiples-table-in-datareader
'programing' 카테고리의 다른 글
서비스 구현 방법(각도의 개념)JS) 반응의 유사 성분 (0) | 2023.09.18 |
---|---|
wordpress permalinks 작동하지 않음 500 오류 (0) | 2023.09.18 |
자바에서 객체의 직렬화의 필요성은 무엇입니까? (0) | 2023.09.13 |
XML에서는 순서가 중요합니까? (0) | 2023.09.13 |
아이폰에서 "명령 /bin/sh failed with exit code 1" 문제를 해결하는 방법 (0) | 2023.09.13 |