2016-07-27 3 views
-1

最初のc#プロジェクトで、リモートSQL Serverからローカルデータベースにレコードを引き出す必要があります。非常に多くのドキュメントを読んで、私は脳死についてです。 Sourceはnpsqlデータソースです。 Target is localdb instance同じスキーマでローカルテーブルを構築しました。私はSqlBulkCopyが正しい解決策だとは思わないので、私は変更を加えて追加しようとしています。コードにエラーがなくても、localdbインスタンスは更新されません。データテーブルをデータセットにマージし、データソースに変更を保存します

DataTable custMsrDT = this.MeasureDB.getMsrCustomerDT(); 

using (SqlConnection connection = new SqlConnection(LocalDB.connStringLocalDB)) 
{ 
    connection.Open(); 

    SqlDataAdapter da = new SqlDataAdapter("SELECT id, crm_customer_id, jb_customer_id, fname, lname, phone, alt_phone, email, street_address, unit_number, neighborhood, city, state, zip, county FROM dbo.customer;", connection); 

    DataSet localDS = new DataSet(); 

    da.Fill(localDS, "customer"); 
    SqlCommandBuilder builder = new SqlCommandBuilder(da); 

    localDS.Tables["customer"].RowChanged += new System.Data.DataRowChangeEventHandler(Row_Changed); 

    localDS.Tables["customer"].Merge(custMsrDT, true, MissingSchemaAction.Add); 

    da.Update(localDS, "customer"); 
} 
+0

「変更を引き継ぎ、追加しようとしていますか?」あなたは、それらを同期しようとしているように聞こえます。 – Plutonix

+0

ええ..私は同期フレームワークについて何かを見た。私はそれを読むことに近づいています。 – Parker

+0

それは質問だった。コピーする方法を示す削除された回答がありますが、そのフレーズを見ました。 「私はレコードを引っ張る必要がある」というのは、後のフレーズで暗示されたものと同じではありません。 – Plutonix

答えて

0

となっています。 table.merge関数を使用するのは答えではありませんでした。行の状態がどのように設定されているかを理解することになります。オリジナルではrowstateは常に「変更されていない」ため、datatable.updateは何もしていませんでした。 load function on the tableを使用することが正しいアプローチでした。

DataTable custMsrDT = this.MeasureDB.getMsrCustomerDT(); 

    using (SqlConnection connection = new SqlConnection(LocalDB.connStringLocalDB)) 
    { 
     connection.Open(); 

     SqlDataAdapter da = new SqlDataAdapter("SELECT id, crm_customer_id, jb_customer_id, fname, lname, phone, alt_phone, email, street_address, unit_number, neighborhood, city, state, zip, county FROM dbo.customer;", connection); 

     DataSet localDS = new DataSet(); 

     da.Fill(localDS, "customer"); 

     SqlCommandBuilder builder = new SqlCommandBuilder(da); 

     localDS.Tables["customer"].RowChanged += new System.Data.DataRowChangeEventHandler(Row_Changed); 


     //localDS.Tables["customer"].Merge(custMsrDT, true, MissingSchemaAction.Add); 


     using (DataTableReader changeReader = new DataTableReader(custMsrDT)) 
     { 

      localDS.Tables["customer"].Load(changeReader, LoadOption.Upsert); 

     } 

     PrintColumns(localDS.Tables["customer"]); 

     DisplayRowState(localDS.Tables["customer"]); 

     da.Update(localDS, "customer") 
関連する問題