0

ちょっと私はこれに慣れていません。私が拾ったものから、これは機能するはずですが、ローカルデータベースは更新されません。

ローカル データベースを作成したときにTelemarketingDatabaseDataSet自動生成された があり、テーブルをデータセットにドラッグしたところ、リンクされていると思います。

今、私はこのコードを持っています:

SqlCeConnection connection = new SqlCeConnection();
connection.ConnectionString = TelemarketingTracker.Properties.Settings.Default.TelemarketingDatabaseConnectionString;
TelemarketingDatabaseDataSet ds = new TelemarketingDatabaseDataSet();
// DataTable tbl = new DataTable();

SqlCeDataAdapter adapter = new SqlCeDataAdapter("select * from Calls", connection);
//adapter.InsertCommand = new SqlCeCommand("InsertQuery", connection);
adapter.Fill(ds,"Calls");
DataTable tbl = ds.Tables["Calls"];
//tbl.Columns.Add("caller");
//tbl.Columns.Add("called");
//tbl.Columns.Add("duration");
//tbl.Columns.Add("time");
var row = tbl.NewRow();

row[1] = Convert.ToString(caller);
row[2] = Convert.ToString(called);
row[3] = Convert.ToString(duration);
row[4] = Convert.ToDateTime(time);
tbl.Rows.Add(row);
adapter.Update(ds, "Calls");
connection.Close();
MessageBox.Show("Database should be updated!");

そして、私は DataSet の使用を好むため、SqlCommand の使用には興味がありません。

問題はテーブルのデータ型に関連している可能性がありますか? それを示唆するエラーは表示されませんが、これが問題である可能性があると思います。私のテーブルは次のもので構成されています:

ID - int,key caller - 呼び出されたvarchar - varchar duration - varchar time - datetime

編集:

ここで、insertQuery 行のコメントを外すと、Syste.Data dll で未処理のエラーが発生しました。

通常の挿入コマンドを使用しようとしても、エラーは発生しませんが、データベースは更新されません。デバッグ ウィンドウを閉じた後に違いが生じる場合は、ローカル データベースの横に X が表示されますが、エラーは表示されません。

これは私が試したコマンドです:

    using (SqlCeCommand com = new SqlCeCommand("INSERT INTO Calls (caller, called, duration, time) Values(@Caller,@Called,@Duration,@Time)", connection))
{
    com.Parameters.AddWithValue("@Caller", row[1]);
    com.Parameters.AddWithValue("@Called", row[2]);
    com.Parameters.AddWithValue("@Duration", row[3]);
    com.Parameters.AddWithValue("@Time", row[4]);


    com.ExecuteNonQuery();
}
4

4 に答える 4

0

Fill()メソッドは、「データセットの行をデータソースの行と一致するように追加または更新します。」この文の重要な部分は、「データソース内のものと一致させること」です。追加している行は、まだソースにないため、Fill()を呼び出すと消去されます。

私は前向きではありませんが、新しいレコードを追加するだけで、既存のレコードを変更/削除する必要がない場合は、Fill()を呼び出す必要はないと思います。ただし、呼び出す必要がある場合は、新しいレコードを挿入する前に、明らかに移動する必要があります。

于 2012-11-25T07:14:01.240 に答える
0

これに似たものを試してください..

string dbfile = new System.IO.FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).DirectoryName + "\\TelemarketingDatabase.sdf";
SqlCeConnection connection = new SqlCeConnection("datasource=" + dbfile);

TelemarketingDatabaseDataSet ds = new TelemarketingDatabaseDataSet();   
SqlCeDataAdapter adapter = new SqlCeDataAdapter();
string qry = @"select * from Calls";
da.SelectCommand = new SqlCommand(qry, connection);
SqlCommandBuilder cb = new SqlCommandBuilder(adapter);
adapter.Fill(ds,"Calls");


DataTable tbl = ds.Tables["Calls"];
var row = tbl.NewRow();
row[0] = caller;
row[1] = called;
row[2] = duration;
row[3] = Convert.ToDateTime(time);
tbl.Rows.Add(row);
adapter.Update(ds,"Calls");

ここの例を参照してください http://www.java2s.com/Code/CSharp/Database-ADO.net/UseDataTabletoupdatetableinDatabase.htm

于 2012-11-25T07:25:02.817 に答える
0

結局、私はこれを解決できませんでした。代わりに、リモート データベースと通常の SQL コマンドを使用しました。

助けてくれた人に感謝します!

于 2012-11-25T09:09:35.550 に答える