重新ADO.net,我得到了DataSet和DataAdapter的概念。我可能会问的是:
Q1 - 数据库连接是否需要保持打开有哪些限制?我可以关闭连接但仍然可以使用DataSet吗?如果是这样,需要做什么来执行更新? DataAdapter是否需要保留活动数据库连接?
Q2 - 如果我愿意的话,更常见的是,在使用WinForms应用程序的用户使用过程中,是让用户:
在这里需要做的DataSet / DataAdapter / Connection是什么?您是否可以在最小化保持数据库打开的指导原则的所有步骤之间关闭数据库连接?
答案 0 :(得分:2)
Q1您不需要保持数据库连接打开。要执行更新,请再次打开连接并调用dataadapter.update()
q2与q1几乎相同,直到再次打开连接并调用dataadapter.update(),更改将仅在本地数据集中。
当然,我确定在特定情况下会有例外情况。
旁注,如果使用c#,我更喜欢使用USING构造,它将在非托管对象上调用dispose并关闭连接。
修改强>
使用数据适配器http://msdn.microsoft.com/en-us/library/33y2221y.aspx
更新数据一个非常简单的例子
{
SqlDataAdapter ad;
SqlConnection con;
SqlCommand cm_insert;
SqlCommand cm_select;
DataSet employees;
employees = new DataSet();
ad = new SqlDataAdapter();
cm_select = new SqlCommand("select * from employees");
cm_insert = new SqlCommand("insert into employees values(@employeename) ");
cm_insert.Parameters.Add("@employeename", SqlDbType.VarChar, 50, "employeename");
ad.InsertCommand = cm_insert;
ad.SelectCommand = cm_select;
using (con = new SqlConnection(@"data source=csl066\sqlexpress;initial catalog=junk;Integrated Security=SSPI;persist security info=False;packet size=4096"))
{
cm_select.Connection = con;
con.Open();
ad.Fill(employees);
}
//Do other work, collect data, sometime later in the app..
using (con = new SqlConnection(@"data source=csl066\sqlexpress;initial catalog=junk;Integrated Security=SSPI;persist security info=False;packet size=4096"))
{
cm_insert.Connection = con;
con.Open();
employees.Tables[0].Rows.Add(new string[] { "Allen" });
ad.Update(employees);
}
}