SqlCeCommand插入C#并没有真正插入到数据库中

时间:2014-02-07 18:24:25

标签: c# sql

当我尝试在.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();

你有什么想法解决这个问题吗?谢谢!

2 个答案:

答案 0 :(得分:1)

这一行应该修改:

transaction.Commit(CommitMode.Deferred);

当您真正想要CommitMode.Deferred时,您正在使用CommitMode.Immediate

请参阅:CommitMode Enumeration @ MSDN

如果延迟提交是您真正想要的,那么您应该检查连接字符串的刷新间隔,并将其修改为更短的时间跨度。默认值为10秒。

请参阅:SqlCeConnectionString @ MSDN

答案 1 :(得分:1)

根据MSDN

  

使用延迟模式获得最佳性能;更改将在ConnectionString FLUSH INTERVAL 属性中指定的时间内闪存到磁盘;

所以需要时间。否则,您可以使用CommitMode.Immediate立即查看效果。