当我尝试在.sdf数据库中插入,删除或更新记录时,该记录在数据库中是临时的。当我再次运行应用程序时,更改不可见。我认为提交函数不会更新数据库。
这是我的插入函数代码:
conn.Open();
SqlCeTransaction transaction;
transaction = conn.BeginTransaction(IsolationLevel.ReadCommitted);
SqlCeCommand cmd = conn.CreateCommand();
cmd.Transaction = transaction;
cmd.CommandText =
"INSERT INTO tblCustomers " + " (LastName, FirstName, MiddleName, Street, City, Phone, TaxCountry, Dealer," +
" Email, FEIN, DateOfBirth, SSAN, DriverLicense, State, Exp, Code, Notes)" +
"VALUES (@last_name, @first_name, @middle_name, @street, @city, @phone_number, @tax_country, @dealer, @email," +
"@fein, @dateofbirth, @ssan, @driver_license, @stat, @exp, @code, @_note)";
cmd.Parameters.AddWithValue("@last_name", textBox2.Text);
cmd.Parameters.AddWithValue("@first_name", textBox3.Text);
cmd.Parameters.AddWithValue("@middle_name", textBox10.Text);
cmd.Parameters.AddWithValue("@street", textBox4.Text);
cmd.Parameters.AddWithValue("@city", textBox5.Text);
cmd.Parameters.AddWithValue("@phone_number", textBox6.Text);
cmd.Parameters.AddWithValue("@tax_country", textBox7.Text);
cmd.Parameters.AddWithValue("@dealer", textBox17.Text);
cmd.Parameters.AddWithValue("@email", textBox8.Text);
cmd.Parameters.AddWithValue("@fein", textBox18.Text);
cmd.Parameters.AddWithValue("@dateofbirth", Convert.ToDateTime(textBox12.Text));
cmd.Parameters.AddWithValue("@ssan", textBox11.Text);
cmd.Parameters.AddWithValue("@driver_license", textBox13.Text);
cmd.Parameters.AddWithValue("@stat", textBox14.Text);
cmd.Parameters.AddWithValue("@exp",Convert.ToDateTime(textBox15.Text));
cmd.Parameters.AddWithValue("@code", textBox16.Text);
cmd.Parameters.AddWithValue("@_note", textBox9.Text);
//cmd.Connection = conn;
cmd.ExecuteNonQuery();
transaction.Commit(CommitMode.Deferred);
clearData();
conn.Close();
你有什么想法解决这个问题吗?谢谢!
答案 0 :(得分:1)
这一行应该修改:
transaction.Commit(CommitMode.Deferred);
当您真正想要CommitMode.Deferred
时,您正在使用CommitMode.Immediate
。
请参阅:CommitMode Enumeration @ MSDN
如果延迟提交是您真正想要的,那么您应该检查连接字符串的刷新间隔,并将其修改为更短的时间跨度。默认值为10秒。
答案 1 :(得分:1)
根据MSDN
使用延迟模式获得最佳性能;更改将在ConnectionString FLUSH INTERVAL 属性中指定的时间内闪存到磁盘;
所以需要时间。否则,您可以使用CommitMode.Immediate
立即查看效果。