我对Windows窗体应用程序中的数据集有疑问。
第1部分:
问题:
1)数据集是否在每次实例化时都会访问数据库。
第2部分:
假设:
问题:
1)将静态版本的数据集存储在内存中是一个坏主意。
选项(评估这些可能的解决方案):
选项1:创建一个静态类,充当数据集的容器。
选项2:在表单中创建需要的数据集,然后为依赖于该数据集的任何后续表单创建属性,并将对该数据集的引用传递给该特定表单,从而阻止GC重新分配内存(并减少数据库调用次数。)
伪代码:这是实例化数据集的父表单。
public partial class ParentForm: Form
{
private DataSet dataset;
public ParentForm()
{
//logic that populates dataset
}
Button_Click(object sender, EventArgs e)
{
DependentOnDataSetForm dependent = new DependentOnDataSetForm(dataset);
}
}
伪代码:这是一种依赖于同一数据集的表单。
public partial class DependentOnDataSetForm : Form
{
private DataSet dataset;
public DependentOnDataSetForm (DataSet dataset)
{
this.dataset = dataset;
}
// Another from that depends on the same dataset.
Button_Click(object sender, EventArgs e)
{
DependentOnDataSetForm2 dependent = new DependentOnDataSetForm2(dataset);
}
}
奖金问题:(不适用于我目前的情况,但很高兴知道以供将来参考)。
创建多个仅负责某些表单所需的某些数据的DataSet.xsd文件是一个好/坏的主意。例如(纯粹假设):假设我有一个负责填写订单的订单服务,这个特定的服务需要访问订单表,客户表,发货表等。所以创建一个仅包含的.xsd文件需要的表是个好主意?
答案 0 :(得分:0)
答案 1 :(得分:0)
对问题#1的回答是否定的。 DataSet对象被视为ADO.NET断开连接的对象。因此它没有命中数据库。您可以使用ADO Connected对象(即DataAdapter)的结果实例化DataSet,但DataSet本身不会连接到数据库。
我会选择选项2但要注意它是一个参考对象,一种形式的变化可能会影响另一种形式。
答案 2 :(得分:0)
完成后,您始终可以在数据集上调用Dispose()方法。然后,当您想再次使用它时,可以实例化它的新实例。