programing

DataTable이 이미 다른 DataSet에 속합니다.

skycolor 2023. 6. 16. 21:34
반응형

DataTable이 이미 다른 DataSet에 속합니다.

이 오류는 데이터 집합에서 다른 데이터 집합으로 데이터 테이블을 추가하는 동안 발생합니다. "DataTable은 이미 다른 DataSet에 속합니다."

dsformulaValues.Tables.Add(m_DataAccess.GetFormulaValues
(dv.ToTable.DefaultView.ToTable(False, strSelectedCols)).Tables(0))

다른 응답자가 지적한 것처럼 데이터 집합에 추가하려는 데이터 테이블이 이미 다른 데이터 집합의 일부이기 때문에 나타나는 오류입니다.

한 가지 해결책은 데이터 테이블을 복사하고 복사본을 다른 데이터 세트에 할당하는 입니다.

dtCopy = dataTable.Copy()
ds.Tables.Add(dtCopy)

복사된 데이터 테이블은 복사된 데이터 테이블의 구조와 데이터를 가집니다.

데이터 테이블의 구조만 원하는 경우 복제를 호출합니다.

dtCopy = dataTable.Clone()

받아들여진 답변은 별로 좋지 않습니다.복제는 항상 마지막 옵션이어야 합니다.

다음은 복제의 간접비를 발생시키지 않고 문제를 해결하는 방법입니다.

        DataSet ds = GetData1();

        DataSet ds2 = GetData2();

        //Assuming you know you've got good data

            DataTable dt = ds2.Tables[0];
            ds2.Tables.Remove(dt);
            dt.TableName = "PortedTable";//you may need to change the table name to prevent conflicts
            ds.Tables.Add(dt);

이 메서드를 호출해 보십시오.

DataTable dt = dv.ToTable.DefaultView.ToTable(False, strSelectedCols)).Tables(0).Clone()

이렇게 하면 의 복사본이 만들어집니다.DataTable그리고 그것을 목표물에 할당합니다.DataSet:

ds.Tables.Add(dt)

이것은 데이터 테이블이 다른 데이터 세트에 속한다는 것을 의미하는 것 같습니다...

데이터 테이블을 XML로 직렬화한 다음 대상 데이터 세트로 역직렬화할 수 있습니다.

저는 당신이 새로운 DataTable을 만들고 구조와 데이터를 새로운 DataTable로 가져와야 한다고 생각합니다.

DataTable을 사용하여 테이블을 복사해 보십시오.Copy() 메서드는 형식화된 DataSet이 아닌 경우에 사용합니다.이 메서드는 동일한 테이블의 새 인스턴스를 생성하여 테이블이 어떤 DataSet에도 속하지 않도록 합니다.

dim newTable as DataTable = oldTable.dv를 DataView = newTable로 복사()합니다.기본 보기

dsformulaValues.Tables.Add(m_DataAccess).공식 값 가져오기(dv).테이블로.기본 보기.테이블로(False, strSelectedCols).표(0)

저도 같은 문제가 있었고 그것을 사용하여 해결했습니다.Remove제 생각에, 당신의 코드는 다음과 같습니다.

dsformulaValues.Tables.Add(m_DataAccess.GetFormulaValues
(dv.ToTable.DefaultView.ToTable(False, strSelectedCols)).Tables(0))

dsformulaValues.Tables.Remove(//I'm not sure to understand your code, so read this code line as only an input for your stuff. Please, consider my code below for more understanding.

작업 코드는 다음과 같았습니다.

DataTable myTable = new DataTable();

private void Save()
{
    DataSet myDataSet = new DataSet();
    myDataSet.Tables.Add(myTable);
    myDataSet.Tables.Remove(myTable);//This works
    myDataSet.WriteXml("myTable.xml");
}

private void buttonSave_Click(object sender, EventArgs e)
        {
          Save();
        }

버튼을 클릭할 때마다buttonSave"DataTable is already belong to otherDataSet" 메시지가 나타납니다.라인 코드 작성 후myDataSet.Tables.Remove(myTable);//This works애플리케이션이 문제없이 실행되기 시작했고 이제는 버튼을 더 많이 클릭할 수 있습니다.myTable오류 메시지가 표시되지 않습니다.

이것이 도움이 되길 바랍니다.

한 바퀴 돌았어요 도움이 됐으면 좋겠어요

_DataTable.TableName = _TableName
If _DataTable.DataSet IsNot Nothing Then
    _DataSet = _DataTable.DataSet
Else
    _DataSet = New DataSet
    _DataSet.Tables.Add(_DataTable)
End If

_DataTable이 새 테이블인 경우에도 이전에 로드된 실제 테이블을 참조하면 이전 구성을 상속받는 DataTable이 됩니다.

간단한 방법은 다음과 같이 테이블을 병합하는 것입니다.

dsformulaValues.Merge(m_DataAccess.GetFormulaValues(dv.ToTable.DefaultView.ToTable(False, strSelectedCols)).Tables(0))

dtCopy = dataTable.복사()

ds.표추가(dtCopy)

다음과 같은 코드를 최적화할 수 있습니다.

ds.표추가(dataTable).복사();

언급URL : https://stackoverflow.com/questions/8830901/datatable-already-belongs-to-another-dataset

반응형