【问题标题】:Interrupting DataAdapters?中断数据适配器?
【发布时间】:2011-04-28 14:37:16
【问题描述】:

我有一种情况,我弹出一个包含“请稍候”消息的对话框窗口,运行 SQL 查询,然后用包含收集结果的 DataGridView 替换“请稍候”消息。

我使用的代码基本上是:

    Dim X As New Data.SqlClient.SqlCommand
    X.CommandText = "SELECT some_data FROM someTable"
    Dim XAdapter As New System.Data.SqlClient.SqlDataAdapter(X)
    Dim XSet As New DataSet
    XAdapter.Fill(XSet, "MyTable")

    Me.someDataGridView.DataSource = XSet.Tables("MyTable").DefaultView

我想将这些数据的检索放到后台线程中,以便在我加载更大的数据集时 UI 不会冻结,但是,这样做之后,我还想允许用户如果访问数据的时间比他们想要等待的时间长,则取消并关闭对话框。

目前,此对话框窗口可以采用任意 SQL 字符串并显示结果(使用 SQLDataAdapter),无需任何额外代码。

我怎样才能使这个过程可中断,同时又保持 SQLDataAdapter 的易用性?

【问题讨论】:

    标签: .net sql vb.net multithreading


    【解决方案1】:

    我怎样才能使这个过程 可中断的,同时也保留 访问的便利性 SQLDataAdapter?

    根据文档,您应该能够在底层 SqlConnection 实例上调用 Close。文档说这将终止并回滚任何待处理的事务。此外,您可以使用SqlCommand.BeginExecuteReader,而不是使用SqlDataAdapter(不幸的是它没有异步Fill 方法),一旦完成,您可以通过调用接受的DataTable.Load 的重载来填充DataTable一个IDataReader。如果您想中断待处理的命令,只需调用Close。

    【讨论】:

    • 没想到只是调用 Close。事务的所有组件都是方法本地的。感谢您的洞察力。
    猜你喜欢
    • 1970-01-01
    • 2011-05-14
    • 2023-03-07
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    相关资源
    最近更新 更多