C#中的动态数据库绑定

时间:2008-10-03 05:57:47

标签: .net database

我这里有一个项目,它连接到一个生产数据库并抓取表格和视图。我继承的代码通过SqlConnection连接到SQL Server数据库,使用用户提供的凭据和它们提供的数据库位置。当需要数据时,它使用连接和SQL字符串来创建SqlDataAdapter,并填充一个全新的DataSet。然后在操作它之后显示该数据,用适当的显示名称替换表列名称,等等。

问题是,整个过程很慢,而且锦上添花的是它在ListViews中显示大量数据,这些数据并不适合给予一万行数据。出于设计原因,我们不会打破页面 - 有一个搜索控件 - 我可以非常努力地实现一个虚拟的ListView,以便简单地回到原来的位置。我只是认为这是ListViews的错误应用程序 - 我正在连接到数据库,我正在显示记录。听起来像是DataGridView的工作。

可悲的是,它只是无效。我正在尝试将DataGridView绑定到我通过DataBinder从连接代码中获取的DataSet,但当我触发它以查看DataGridView完全为空时数据位于DataSet中。

但是,如果我在我的测试数据库上使用GUI绑定,采用当前的数据库架构和我的凭据,那么它看起来很有效。但我不能使用这些东西,因为它根本不够灵活 - 我不想在代码中定义一个架构,每次我们更新数据库时都必须更改,我需要访问连接字符串,并且我似乎没有从它创建的TableAdapter中获得它。

我是否遗漏了一些简单的内容以使我的DataSet / BindingSource解决方案有效?我吠叫错了树吗?

无论如何,它是否值得摆弄绑定?我能看到的所有绑定东西似乎都让我90%的方式,但是我不能修改连接字符串或按照我想要的方式对特定列进行排序,而且它似乎要我给它一个定义的模式一旦数据库发生变化,它就会破裂 - 而手写代码至少是防御性设计并且非常灵活。我不是在削减功能,而且缓慢的解决方案已经有效 - 如果我不得不放弃我的一些要求以使其工作,我们将只处理我们所拥有的。

3 个答案:

答案 0 :(得分:1)

我不确定您是否根本不能更改查询,或者只是在您发布的最后提到的情况中更改。

但是如果可以的话,我会建议实现某种分页,并且只检索数据用户所在的特定页面的行。这会在性能上产生巨大差异,特别是如果结果集与您说的一样大。这可能是我认为你可以做出的最大的性能提升。并且您可以保留当前正在运行的listview实现。此外,即使你有一个网格,你自己的查询填充它,你仍然需要某种分页策略,或者也会很慢。

我刚抓了一个关于实施的random article,但你可以找到many others

编辑:关于你更新的问题,我的答案的重点是,如果它没有破坏,不要修复它。如果listview现在可以使用,为什么要改变呢?

答案 1 :(得分:1)

只要您指定了表名,它就可以正常工作(否则IIRC使用第一个表)。当然,您可以通过向DGV提供适当的DataTable(而不是DataSet)来简化操作。 您可能还想检查DGV上是否启用了自动列生成。但绑定到ad-hoc DataTable工作正常;我一直用它来举例等。

答案 2 :(得分:0)

在设计器中打开数据集,单击适配器,然后将连接更改为public(默认为内部),然后就可以访问它了

至于你的其他问题,向我们展示codez - datagridview上的数据绑定工作正常AFAIK ......