2011-08-19 3 views
0

C#, .net 3.5 및 MySQL-Database를 사용하고 있습니다. 서버 2에 복사하려는 서버 1에 채워진 테이블이 있습니다. 서버 2에는 동일한 테이블 구조가 있지만 테이블은 비어 있습니다. 이제 서버 1의 데이터를 서버 2로 복사하려고합니다. 서버 1에 연결하여 정보를 DataSet에 채 웁니다. 문제가 없습니다. 그런 다음 다른 서버에 대한 두 번째 연결을 엽니 다. 내 문제는 어떻게 두 번째 서버에이 데이터 집합을 저장할 수 있습니까? Update() - 명령은 서버 1과 동일한 UpdateCommand 및 InsertCommand-CommandText를 설정하더라도 아무런 효과가 없습니다. Update (DataSet, "TableName")를 사용할 때 오류가 없지만 테이블은 여전히 ​​비어 있습니다. MSSQL-Databases의 경우 BulkCopy가 옵션이 될 수 있지만 MySQL DB에는 해당 사항이없는 것으로 보입니다!C#에서 채워진 MYSQL 테이블을 다른 데이터베이스로 복사하는 방법

나는 mysqldump를 사용하고 싶지 않다. 클라이언트에서 C 언어로 programmaticaly하고 싶다.

아이디어가 있으십니까? 참조 MySQL의에서 원래 ADO.NET 제공자와 "순수 ADO.NET"를

 MySqlConnection conn_DB1 = new MySqlConnection(connString_DB1); 
     MySqlDataAdapter adp_DB1 = new MySqlDataAdapter("select * from myDB", conn_DB1); 

     DataSet theDataSet_DB1 = new DataSet(); 
     adp_DB1.Fill(theDataSet_DB1, "myDB"); //everything is fine, the Data is there 


     MySqlConnection conn_DB2 = new MySqlConnection(connString_DB2); 
     MySqlDataAdapter adp_DB2 = new MySqlDataAdapter("select * from myDB", conn_DB2); 

     DataSet theDataSet_DB2 = new DataSet(); 
     adp_DB1.Fill(theDataSet_DB2, "myDB"); //this DataSet is empty, of course 

     theDataSet_DB2 = theDataSet_DB2.Copy(); //the data is updated, the second DataSet has all the rows as expected 

     adp_DB2.Update(theDataSet_DB2, "myDB"); //no error on execution, but the table is still empty on the second server 
+0

@Zhaph 내가합니다 (Zhaph 보정과) 위의 코드를 테스트하기 위해 노력하고 나는이 문제에 밟은 :

foreach (DataTable table in theDataSet_DB2.Tables) foreach (DataRow row in table.Rows) row.SetAdded(); 

은 데이터 어댑터에 연결된 MySqlCommandBuilder을 구축하는 것이 필요 하나의 테이블에서 다른 테이블로 주요 테이블의 키를 재조정합니다. 테이블 PK의 ints 자동 증분 위치 ... 어떤 생각? .. –

+0

@ 브라이언 내 이전의 코멘트를 참조하십시오. –

답변

0

난 당신이 MySQL을 DB에 액세스하는 데 사용하는 라이브러리 모르겠습니다 ...

:

편집 이 artcile http://www.codeproject.com/KB/database/GenericCopyTableDataFcn.aspx

당신은 MySQL의 커넥터를 사용하는 경우 MySqlBulkLoaderhttp://dev.mysql.com/doc/refman/5.1/en/connector-net-programming-bulk-loader.html을 참조라는 클래스가 있습니다.

MySqlLoader ML = new MySqlLoader("myDB", conn_DB2); 
ML.CreateColumns(); 
ML.LoadTable(theDataSet_DB1.Tables[0]); 
1

행 : 당신은 당신이 할 수 있었던 Devart MySQL의 구성 요소를 사용하는 경우

... 그래서 소스 테이블이 먼저 사용에서 파일을 작성해야합니다 -이 클래스는 AFAIK 파일을 소요 테이블은 "변경되지 않음"이므로 아무 것이나 발생합니다. 행을 업데이트하기 전에 행을 "추가"로 표시해야합니다. 복사 할 때 ...

new MySqlCommandBuilder (dataAdapter); 
관련 문제