管理表中记录的最佳方法

时间:2012-11-18 13:40:14

标签: c# sql winforms linq

我很抱歉他们多次询问这个问题,但我还没有找到最佳答案。

我担心应用需要很长时间下载记录过滤记录。假设我有一个表名为tbl_customer 。并且tbl_customer中的记录超过 10,000行

第一个问题,我使用数据网格视图来显示记录。如果我将最多10,000行行的所有记录下载到数据网格视图中,那将是理想的吗?或者我最好把记录行限制?

第二个问题 tbl_customer 过滤记录的最佳方法是什么?我们只需要使用SQL查询吗?使用LINQ?或者可能有更好的方法?

目前,我只使用这种方式:

DataTable dtCustomer = new DataTable();

 using (SqlConnection conn = new SqlConnection(cs.connString))
        {
            string query = "SELECT customerName,customerAddress FROM tbl_customer WHERE customerAddress = '"+addressValue+"' ORDER BY customerName ASC;";

            using (SqlDataAdapter adap = new SqlDataAdapter(query, conn))
            {
                adap.Fill(dtCustomer);

            }
        }

dgvListCustomer.DataSource = dtCustomer

然后我学习关于LINQ ,所以我喜欢这个

    DataTable dtCustomer = new DataTable();

         using (SqlConnection conn = new SqlConnection(cs.connString))
                {
                    string query = "SELECT * FROM tbl_customer ORDER BY customerName ASC;";

                    using (SqlDataAdapter adap = new SqlDataAdapter(query, conn))
                    {
                        adap.Fill(dtCustomer);

                    }
                }

var resultCustomer = from row in dtCustomer.AsEnumerable()
                                         where row.Field<string>("customerAddress") == addressValue
                                         select new
                                         {
                                             customerName = row["customerName"].ToString(),
                                             customerAddress = row2["customerAddress"].ToString(),

                                         };

 dgvListCustomer.DataSource = resultCustomer;

工作流程 SQL&gt; DATATABLE&GT; LINQ&gt; DataGridView 适合过滤记录吗?或者,如果有更好的建议是最受欢迎的。

谢谢你...... :)

1 个答案:

答案 0 :(得分:1)

  

我担心应用程序需要很长时间才能下载记录或过滤记录。

欢迎 - 您似乎生活在像我这样的世界中,以毫秒为单位测量性能毫秒,是的,在低功率服务器上,热负载和过滤10.000行的时间可能超过一毫秒(0.001秒)。 / p>

因此,我的建议不是将数据库放在平板电脑或手机上,而是至少使用适当的桌面级计算机或数据库服务器的VM。

作为提示:我经常在十亿行表上查询,而且速度很快。如今,任何低于一百万行的东西都是一个笑话 - 事实上,当我15年前开始使用数据库时,这并不值得一提。你是那个问一个法拉利或保时捷是否更好的人,因为你担心这些情况是否超过20公里/小时。

  

如果我将最多10,000行的所有记录下载到数据网格视图中,那将是理想的吗?

为了被解雇?是。数据库的旧规则:永远不会加载比您更多的数据,尤其是当您没有线索时。忘记SQL方面 - 你会遇到10.000行甚至更多的UI问题,尤其是可用性问题。

  

我们只需要使用SQL查询吗?还是使用LINQ?

提示:Linq也在使用SQL。问题是更多 - 你想花多少时间在手写的SQL中编写无聊的重复代码?特别是你也做了“聪明”的事情,比如按名称引用字段,而不是顺序引用字段,并要求“select *”而不是字段列表,机器人显然是初学者错误。

你绝对不应该做的事 - 但是你做的 - 正在使用DataTable。获得一本关于编程数据库的书。 RTFSM可能有所帮助 - 两个LINQ(我不确定你的意思 - LINQ是编译器的一种语言,你需要一个实现者,所以可能是NHibernate,实体框架,Linq2Sql,BlToolkit,仅举几个例子)从LINQ查询到sql语句。)

  

工作流程SQL&gt; DATATABLE&GT; LINQ&gt; DataGridView适合过滤记录吗?

法拉利也适合从A到B运输20吨煤 - 这是最糟糕的汽车。 GSour堆栈可能是我见过的最糟糕的,但是你能做到这一点很合适 - 缓慢,大量使用,但你会得到一个结果并希望被解雇。您将数据从高性能数据库拉入数据表,然后使用非集成技术(LINQ)过滤(不使用数据表中的索引)进入另一层。

只是为了给你一个想法 - 这可以让你从一些“开始编程”课程中删除。

怎么样:

LINQ

点。

拉出转到UI的业务对象集合。周期。

至少阅读一些您使用的技术的示例代码。