2013-12-03 8 views
0

다음 코드를 실행하려고합니다. 내가하려는 것은 데이터 세트의 한 열을 다른 데이터 세트의 열 중 하나로 복사하는 것입니다. 그것은 동일한 오류를 반환 다음 추가를 만들기에도 불구하고C에서 데이터 세트에 열 값을 지정할 때 '위치에 행이 없습니다'.

There is no row at position 0.

:

int i=0 
    foreach (DataRow dr in ds_input.Tables[0].Rows) 
    { 
    ds_output.Tables["output"].Rows[i]["Serial_Number"] = dr["Serial Number"].ToString(); 
i++; 
    } 

dsdr의 열 값을 할당하는 반면, 컴파일러는 다음과 같은 오류를 반환 다음과 같이 코드는 다음과 같습니다

int i=0; 
    foreach (DataRow dr in ds_input.Tables[0].Rows) 
    { 
     ds_output.Tables["output"].NewRow(); 
     ds_output.Tables["output"].Rows[i]["Serial_Number"] = dr["Serial Number"].ToString(); 
    i++;} 

답변

0

을에 추가해야합니다.. 출력 및 입력 테이블에 동일한 열이있는 경우 DataTable.Clone을 사용하여 데이터를 복사하지 않는 테이블을 복제 할 수 있습니다. 그런 다음 DataTable.ImportRow을 사용하여 DataRow 사본을 입력 테이블에서 작성하고이를 출력 테이블에 추가 할 수 있습니다. 또는 당신은 새로운 DataRow을 추가 table.Rows.Add를 사용하여 입력 된 DataRow의 ItemArray (모든 필드)를 사용할 수있다 : 당신은 당신이 DataTable.Copy를 사용할 수있는 입력 테이블의 전체 복사본을 만들려면

DataSet ds_output = new DataSet(); 
DataTable tblOutput = ds_input.Tables[0].Clone(); 
ds_output.Tables.Add(tblOutput); 
foreach (DataRow dr in ds_input.Tables[0].Rows) 
{ 
    tblOutput.ImportRow(dr); 
    // or: 
    DataRow newRow = tblOutput.Rows.Add(); 
    newRow.ItemArray = dr.ItemArray; 
} 

을 :

DataTable tblOutput = ds_input.Tables[0].Copy(); // nothing more needed 
+0

실제로 출력 데이터 집합에는 4 개의 열이 있으며 그 중 하나는 입력 데이터 집합에서 복사되고 나머지는 데이터베이스에서 복사됩니다. 네가 두 번째 제안의 예를 들어 줄 수 있다면 좋을 것이다. – Salik

+1

@Salik : 두 샘플을 모두 제공했습니다. 두 번째는 루프에서 '// or'로 시작합니다. 원하는대로'newRow'를 수정할 수 있습니다. 모든 필드를 복사하기 위해'ItemArray'를 사용할 필요가 없습니다. 'newRow.SetField ("ColumnName", value)'를 사용하여 필드 값을 설정할 수 있습니다. 'tblOutput.Rows.Add()'는'DataRow'를 반환 할뿐만 아니라이 행이 이미'DataTable'에 추가되어 있으므로 나중에 다시 추가 할 필요가 없습니다. –