2012-03-30 39 views
0

私はこれまで作業していたアプリケーションをデータベースとして使用しています。私はそれをSQLに切り替えています。私はちょっと新しいです。SQLDataAdapterが更新されていますが、データベースに追加されて更新されていません。

public bool Update_DB_FromTable(DataTable DTable) 
{ 
    try 
    { 

     SqlConnection myConnection = new SqlConnection("Data Source=" + hostname + " ;User ID=SALX; Password=password;" + 
           "database=" + dbname + "; " + 
           "connection timeout=30"); 
     myConnection.Open(); 
     SqlCommand myCommand = new SqlCommand("SELECT * FROM dbo." + tablename, myConnection); 
     SqlDataAdapter da = new SqlDataAdapter(myCommand); 
     SqlCommandBuilder b = new SqlCommandBuilder(da); 
     int count = da.Update(DTable); 
     myConnection.Close(); 
     return true; 
    } 
    catch 
    { 
     return false; 
    } 
} 

これは動作しますが、すべての時間は、そのだけでデータベースの末尾にデータを追加し、Accessでのようなデータベースを「更新」しません動作しますが、次のように

私のコードです。最悪の部分は多くの重複したエントリを作成するためです。手動でデータベースから削除することはできません。

ご協力いただければ幸いです。

乾杯、

-Sean-

「DTable」で

+0

DataTableに最初にデータを入力するコードを投稿できますか?ありがとう。 – ristonj

+0

最初はOleDbDataAdapter.Fill(MS Accessのテーブル)からデータテーブルを作成していましたが、そのテーブルでsqlDataAdapterを更新しても何も起こりませんでした。私はそのDataTableから新しいDataTableを作成し、更新しました。それが挿入されるという問題を私にもたらします。実行するたびにすべてのレコードを末尾に追加します。 –

答えて

3

行がデータベースに対応する行と何が起こるかを決める。これは本当に新人の質問かもしれませんが、私は困惑しています。 "DTable"の行のステータスが "isNew"の場合は行が挿入され、ステータスが "変更"の場合はdbテーブルが更新されます。

+1

k3bは正しいです。 DataAdapterが期待どおりに機能するには、レコードをデータテーブルにSELECTして更新し、dataadapterがレコードを更新として認識する必要があります。 DataRow.SetModified()を呼び出さない限り、データテーブルが更新中であることを認識しないため、レコードを挿入することはできません。それは同じ影響を与えるかもしれない。しかし、行を変更して挿入するときと挿入するときをどのように知っていますか? – Rich

+0

hmmmおそらくこれに私のアプローチはすべて間違っている、私はMS Accessデータベースからテーブルを引っ張って、反映するSQLテーブルが必要です。基本的には、ローカルのデータベースをリモートSQLデータベースと同期させようとしています –

+0

ありがとうございますk3bは、今、完璧な意味があります! –

関連する問題