좋아, 내가 DataRow
DataReader
밖으로 추출하고 싶습니다. 나는 꽤 많은 시간 동안 주변을 둘러 보았고, 이것을 할 수있는 간단한 방법이없는 것처럼 보입니다.DataReader의 현재 행에서 DataRow를 가져 오는 방법은 무엇입니까?
나는 DataReader
이 더 많은 행 모음임을 이해하지만 그 때 한 행만 읽습니다.
그럼 내 질문 : DataRow
DataReader
의 현재 행을 추출하는 방법이 있습니까?
좋아, 내가 DataRow
DataReader
밖으로 추출하고 싶습니다. 나는 꽤 많은 시간 동안 주변을 둘러 보았고, 이것을 할 수있는 간단한 방법이없는 것처럼 보입니다.DataReader의 현재 행에서 DataRow를 가져 오는 방법은 무엇입니까?
나는 DataReader
이 더 많은 행 모음임을 이해하지만 그 때 한 행만 읽습니다.
그럼 내 질문 : DataRow
DataReader
의 현재 행을 추출하는 방법이 있습니까?
DataReader의 현재 행에서 DataRow를 추출 할 수있는 방법이 있습니까?
아니요, 최소한 간단한 방법은 없습니다. 모든 DataRow는 Table에 속합니다. 이 속성을 비워 둘 수 없으며 ImportRow를 사용하지 않고 테이블을 변경할 수도 없습니다.
그러나 DataRows가 필요한 경우 먼저 DataTable
을 채우지 않으시겠습니까?
DataTable table = new DataTable();
using(var con = new SqlConnection("...."))
using(var da = new SqlDataAdapter("SELECT ... WHERE...", con))
da.Fill(table);
// now you have the row(s)
당신이 정말로 당신이 컬럼에 대한 모든 정보를 얻을 수 reader.GetSchemaTable
를 사용할 수있는 DataReader
에서 행 (들)을 취득해야하는 경우 :
if (reader.HasRows)
{
DataTable schemaTable = reader.GetSchemaTable();
DataTable data = new DataTable();
foreach (DataRow row in schemaTable.Rows)
{
string colName = row.Field<string>("ColumnName");
Type t = row.Field<Type>("DataType");
data.Columns.Add(colName, t);
}
while (reader.Read())
{
var newRow = data.Rows.Add();
foreach (DataColumn col in data.Columns)
{
newRow[col.ColumnName] = reader[col.ColumnName];
}
}
}
을하지만 그건 정말 효율적이지 않습니다.
한 번에 하나의 행만 가져옵니다. 그래서 저는'DataReader'가'DataTable'을 채워서 다른'DataTable'의 다른 행과 병합하는 것보다 낫다는 것입니다. –
당신의 편집은 멋진 관점을 가져옵니다. "DataTable"을 단일 행으로 채우고 이후에 병합하는 것보다 실제로 어떻게 더 좋아 보이지 않습니다. 내 질문에 정확히 답하지 않으면 답변 이벤트로 표시됩니다. –
@im_a_noob : 이제 코드를 테스트하고 두 번째 부분을 편집했음을 유의하십시오. –
그것은 여기에 분명 아니지만,
CType(reader, IDataRecord)
는 다음과 같이 사용할 수 있습니다 단지 행 얻을 수 있도록 솔루션입니다 : 없음 _ "A DataReader를 더 행의 모음입니다"_
While reader.Read()
CType(reader, IDataRecord)
End While
에게, 단일 레코드에 대한 뷰와 같습니다. 'DataReader'는 데이터베이스의 레코드에 대한 전진 전용 스트림입니다. 현재 레코드 만 볼 수 있습니다. –