首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

关于在windows mobile5.0 上使用SQLite查询的有关问题

2012-03-24 
关于在windows mobile5.0 上使用SQLite查询的问题?C# codeDataManagement dm new DataManagement()bind

关于在windows mobile5.0 上使用SQLite查询的问题?

C# code
  DataManagement dm = new DataManagement();  bindingSource1.DataSource = dm.GetPatientOrder(patientId, "", conn);  dataGrid1.DataSource = bindingSource1.DataSource;  //==============================================================        public DataTable GetPatientOrder(string patientId, string orderNo, SQLiteConnection conn)        {            string sqlSearch = "";            if (orderNo.Trim() != String.Empty)            {                sqlSearch += " AND  Order_no=" + orderNo + " ";            }            string sql = @"SELECT *,case  repeat_indicator when 1 then '长期' ELSE '临时' end repInd,                            '记录' as Performs FROM ORDERS where  PATIENT_ID='" + patientId + "' " + sqlSearch + "  ";            SQLiteCommand cmd = new SQLiteCommand(sql, conn);            SQLiteDataReader rdr = cmd.ExecuteReader();            DataTable dt = new DataTable();            dt.Load(rdr);            rdr.Close();            return dt;        }



用以上代码查询少量数据是很快的,但是查询一万条左右的数据要20多秒,经调试发现在 dt.Load(rdr);这里耗时了10多秒,bindingSource1.DataSource = dm.GetPatientOrder(patientId, "", conn);赋值的时候也耗时了10多秒.。。。

请大家帮忙看下程序为何如此的慢,代码是否可以优化提高性能呢?谢谢了~~


[解决办法]
sqlite中是有事务的
开启事务的时间,性能会更高
[解决办法]
先begin
最后commit
可以减少sqlite内部的更新次数
[解决办法]
帮顶一下呀,
[解决办法]
关注学习..
[解决办法]
你试试自己写这两个慢的地方 看看效率怎么样
[解决办法]
帮你顶上来。。。。加油。。。
[解决办法]
不要急哈。。慢慢来。。。呵呵。。
再顶一个。。。我也帮不到你。。真是惭愧。。。
[解决办法]
把LoadDataRow也改了 自己写
[解决办法]
既然在数据库里查询慢,那就别用数据库,用文件二分查找。
基础数据通过PC程序排序
DataView dv = new DataView(dt);
dv.Sort = "barcode Asc"; //根据barcode这个字段来排序。

再写入到文本文件里。


PDA直接在程序里打开文本文件来二分查找
前提:
1、文件里面每一行的字符必须是相等的,不等的用空格占位
2、条码必须从小到大按顺序排列
3、注意,有1个地方需要灵活改动:(char)59 是 分号分隔符
C# code
#region 二分查找        /// <summary>        /// 二分查找        /// </summary>        /// <param name="CodeData">需查找的条码</param>        /// <param name="InfoList">用于存放查询到的该条码的整条数据</param>        /// <param name="RowLenght">控制每一行的总长度+2(回车算2个字符)</param>        public void Bsearch(string CodeData, ArrayList InfoList,int RowLenght)        {            try            {                InfoList.Clear();                FileStream fs = new FileStream(@"MyAppData\data\down\lib.txt", FileMode.Open);                long txtLenth = fs.Seek(0, SeekOrigin.End) / RowLenght;                string tmp = "";                Byte[] rowData = new Byte[RowLenght];                long low = 0;                long high = txtLenth - 1;                long mid = 0;                bool flag = false;                long tmpMid = 0;                Encoding chCode = Encoding.GetEncoding("GB2312");                while (low <= high)                {                    mid = (low + high) / 2;                    fs.Seek(mid * RowLenght, SeekOrigin.Begin);                    fs.Read(rowData, 0, RowLenght);                    tmp = "";                    tmp = chCode.GetString(rowData, 0, rowData.Length).Trim();                    if (CodeData == tmp.Split((char)59)[0].Trim())                    {                        InfoList.Add(tmp);                        flag = true;                        break;                    }                    else if (CodeData.CompareTo(tmp.Split((char)59)[0].Trim()) > 0)                    {                        low = mid + 1;                    }                    else                    {                        high = mid - 1;                    }                }                if (flag)                {                    tmpMid = mid - 1;                    while (flag)                    {                        if (tmpMid < 0)                        {                            break;                        }                        fs.Seek(tmpMid * RowLenght, SeekOrigin.Begin);                        fs.Read(rowData, 0, RowLenght);                        tmp = "";                        tmp = chCode.GetString(rowData, 0, rowData.Length).Trim();                        if (CodeData == tmp.Split((char)59)[0].Trim())                        {                            InfoList.Add(tmp);                            tmpMid--;                        }                        else                        {                            break;                        }                    }                    tmpMid = mid + 1;                    while (flag)                    {                        if (tmpMid > high)                        {                            break;                        }                        fs.Seek(tmpMid * RowLenght, SeekOrigin.Begin);                        fs.Read(rowData, 0, RowLenght);                        tmp = "";                        tmp = chCode.GetString(rowData, 0, rowData.Length).Trim();                        if (CodeData == tmp.Split((char)59)[0].Trim())                        {                            InfoList.Add(tmp);                            tmpMid++;                        }                        else                        {                            break;                        }                    }                    fs.Close();                    return;                }                else                {                    fs.Close();                    return;                }            }            catch (IOException ex)            {                InfoList.Clear();                MessageBox.Show(ex.ToString());                return;            }        }        #endregion 


[解决办法]
学习!关注中!
[解决办法]
PDA最大的问题就是效率的问题,关注中.
看到Alan_pft文件二分查找方法,想到了R-tree查找方法.
帮顶.

热点排行