C# 如何在不下载所有数据的情况下连接ODBC并显示“大表”

C# 如何在不下载所有数据的情况下连接ODBC并显示“大表”,c#,wpf,datagrid,odbc,C#,Wpf,Datagrid,Odbc,我尝试在我的程序中通过ODBC进行连接,以显示具有100000行和20列700MB的表。这个程序只是一个数据库查看器,它应该尽可能快,并且一次不必显示超过30-50条记录 我认为ODBC连接只会在需要显示记录时自动调用数据库,就像DataGrid项目上的虚拟化对内存的作用一样,但实际上并非如此。 当我使用查询时,比如 从BigTable中选择* 我的程序开始下载整个表并将其加载到内存中。 有没有办法只加载对我可见的记录,而不将所有表下载到内存中?但当我向下或向上滚动DataGrid中的任何一行时

我尝试在我的程序中通过ODBC进行连接,以显示具有100000行和20列700MB的表。这个程序只是一个数据库查看器,它应该尽可能快,并且一次不必显示超过30-50条记录

我认为ODBC连接只会在需要显示记录时自动调用数据库,就像DataGrid项目上的虚拟化对内存的作用一样,但实际上并非如此。 当我使用查询时,比如

从BigTable中选择*

我的程序开始下载整个表并将其加载到内存中。 有没有办法只加载对我可见的记录,而不将所有表下载到内存中?但当我向下或向上滚动DataGrid中的任何一行时,会毫不停顿地加载显示下一行

这是我打开、关闭ODBC连接并将datatable绑定到DataGrid的代码

   using (OdbcConnection con = new OdbcConnection("DSN=" + sourceDriver.SelectedValue.ToString() + ";UID=myLogin;PWD=myPSWD" ))
        using (OdbcDataAdapter dadapter = new OdbcDataAdapter(command, con))
        {
            try 
            {
                DataTable table = new DataTable();
                dadapter.Fill(table);
                dataTable.ItemsSource = null;
                dataTable.Items.Clear();
                dataTable.ItemsSource = table.DefaultView;
                dataTable.Items.Refresh();
                table = null;

            }
            catch ( Exception e )
            {
                MessageBox.Show(e.Message);
            }

        }
   }
谢谢你的帮助

问候


另外,这段代码不是很漂亮,没有实现更好的异常处理,但它是我未来工作的基础。

不要拉所有列,而是决定需要哪些列,然后进行分页。定义页面大小,从/到等。感谢您的快速回答。填充就是这样。在完成之前,它不会进入下一行。Fill甚至不知道datatable。