C# C.NET3.5CompactSQLCE

C# C.NET3.5CompactSQLCE,c#,sql,database,.net-3.5,compact-framework,C#,Sql,Database,.net 3.5,Compact Framework,好的,我正在尝试为我的HP Ipaq211编写一个程序,我可以在工作中使用它。我是一个接受订单的服务器,而不是使用纸张。我已经走了相当远,决定最好使用数据库来保存完整的菜单信息。我为饮料创建了一个数据库,从4列{ID,Item,Price,Options}开始,其中ID是主键 我创建了一些混合物,使我能够将数据读入一个对象,然后创建这些对象的列表,但它们在Ipaq上的执行速度都非常慢。我已经自学了编程方面的所有知识,所以请容忍我,这里是我的一个尝试,它可以工作,但速度很慢,我需要它来工作得更快

好的,我正在尝试为我的HP Ipaq211编写一个程序,我可以在工作中使用它。我是一个接受订单的服务器,而不是使用纸张。我已经走了相当远,决定最好使用数据库来保存完整的菜单信息。我为饮料创建了一个数据库,从4列{ID,Item,Price,Options}开始,其中ID是主键

我创建了一些混合物,使我能够将数据读入一个对象,然后创建这些对象的列表,但它们在Ipaq上的执行速度都非常慢。我已经自学了编程方面的所有知识,所以请容忍我,这里是我的一个尝试,它可以工作,但速度很慢,我需要它来工作得更快

    public class _itemObject
    {

    public _itemObject()
    {

        ID = 0;
        _ioName = "";
        _ioPrice = "";
        _ioOptions = -1;

    }
        public _itemObject(int _next, string Tbl_Name)
        {
        try
        {

            string conSTR = "Data Source=" + (System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)) +
                    "\\TestDatabase.sdf;Persist Security Info=True";
            SqlCeConnection _connection = new SqlCeConnection(conSTR);


            SqlCeCommand _cmd = new SqlCeCommand("select ID from " + Tbl_Name + " where ID ='" + _next.ToString() + "'", _connection);
            SqlCeCommand _cmd2 = new SqlCeCommand("select * from " + Tbl_Name + " where ID ='" + _next.ToString() + "'", _connection);
            SqlCeCommand _cmd3 = new SqlCeCommand("select price from " + Tbl_Name + " where ID ='" + _next.ToString() + "'", _connection);
            SqlCeCommand _cmd4 = new SqlCeCommand("select special from " + Tbl_Name + " where ID ='" + _next.ToString() + "'", _connection);



            _connection.Open();
            if (_cmd.ExecuteScalar() != null)
            {

                ID = (Convert.ToInt32(_cmd.ExecuteScalar().ToString()));
                _ioName = _cmd2.ExecuteScalar().ToString();
                _ioPrice = _cmd3.ExecuteScalar().ToString();
                _ioOptions = (Convert.ToInt32(_cmd4.ExecuteScalar().ToString()));
            }
            else
            {

            }
            _connection.Close();
        }

        finally
        {

        }
        }
然后将此对象添加到列表中,从中加载所需的数据


我知道这很难看,但如果有人能给我上什么课,我将不胜感激:

答案可能会因你的最终目标而异

a为什么需要使用4个sql命令?一个命令应该可以获取所有信息。例如:

从表_名称中选择*

将在SqlCeDataReader.ExecuteReader调用中一次报告所有数据,您可以通过迭代来填充列表

b,如果以后不再调用SQL Server用于远程访问/同步等,如果没有太多的数据记录,则可以考虑切换到另一个数据存储IE XML太慢或二进制文件。 如果您需要更多帮助,请提供更多详细信息

stackoverflow中也有SQLCE示例,其他示例使用搜索

好的,从你的评论中我看到你在开始时有一些问题

在这里,您将找到一个完整的POS解决方案。您可以将服务员的代码更改为使用本地数据库


…以后可能会添加一些简单的示例…

没有回答您的问题,但您可能希望使用SQL Express或LocalDB代替SQL CE,因为它已被弃用。请参阅相关的microsoft MSDN链接,讨论此不推荐和替代方案。感谢您的帖子,虽然它似乎不适用于我,但我没有说没有解决方法,所以它确实存在。但是我不得不使用VisualStudio2008和.NETCompactFramework 3.5,其中的所有信息都是针对VisualStudio2010和.NET4的。。。愚蠢的Windows Mobile 6.1!!惠普没有提供很好的更新…嗯。。。我想我可以使用1个Sql命令。。。就像我说的,我已经自学了我所知道的一切,SQL命令让我困惑了一段时间,但我正在变得更好。。。我想。。。因此,如果我使用SqlCeDataReader.ExecuteReader,那么迭代项目的最佳方式是什么。。。我看了链接,这将是非常有帮助的,我想是的,谢谢!!!我认为使用数据表会有所帮助,你有什么想法吗?至于b部分,如果你愿意的话,我很乐意给你更多的信息,但我不能在一条评论中把所有的信息都放进去,所以我会在一秒钟后发布一条后续评论。好的,所以我现在会告诉我这是否是一个坏的1数据库,大约有12个表。每一张桌子都将被命名为饮料或主菜,并包含原始帖子中提到的4列。将有一个主控件,其中包含标有饮料、主菜等的按钮。。。单击饮料按钮时,它将打开一个新表单,并使用项目列中的字符串填充按钮的文本。然后,当点击“水”按钮时,我需要让应用程序知道“水”行中的剩余信息哦,因为它位于手持设备上,并且我不会连接互联网,所以该数据库是本地数据库。好吧,我已经过了启动阶段。。。哈哈,到目前为止,我已经做了很多工作,但它现在是一团混乱,因为我99%的代码都是trail和error…:但是你给我的第一个链接可能是皇冠上的宝石,因为我修改了一些代码来反映他们的代码,到目前为止似乎要快得多。。。但我会随时通知你。。。我还检查了第二个链接,我要下载它,看看可能会有一些很酷的想法,我不敢相信我以前从未偶然发现过它@josefOK,一些技巧:试着经常使用类和helper/wrapper,这样你就可以得到独立的模块,你可以很容易地重新编写。例如:将所有用于管理检索、更改等数据的代码移动到一个类中。将数据层移动到一个单独的类中,这样您就可以从sqlCe切换到sqlite或其他任何类型。由于有多个具有相同结构的表,因此需要抽象这些表以获取基于相同类的数据类。然后可以重用基类代码,而无需反复编写相同的代码。