Pocket PC应用程序中使用SQL Server CE |
| 作者:chinabyte 来源:chinabyte.com 发布时间:2005-12-21 16:45:39 |
|
omboBox控件绑定: Private Sub cmdSearch_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles cmdSearch.Click Dim ws As New TitlesWS.Service1() ' get the web service ds = ws.getTitles(txtSearch.Text) cboResult.DataSource = ds.Tables(0) cboResult.DisplayMember = "title" End Sub 实际上当书名被选定后,他更多的信息将显示在label控件上。 Private Sub cboResult_SelectedIndexChanged( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles cboResult.SelectedIndexChanged ' display the information of the ' selected book. Dim row As DataRow row = ds.Tables("titles").Rows( _ cboResult.SelectedIndex) lblTitleID.Text = row.Item("title_id") lblPrice.Text = "$" & row.Item("price") txtNotes.Text = row.Item("notes") End Sub ![]() 图6 显然ADD按钮用于增加订单中的数量,因此必须给ADD按钮添加一个单击事件: Private Sub cmdAdd_Click( ByVal sender As System.Object,ByVal e As System.EventArgs) _ Handles cmdAdd.Click '---add the title to the stores ORDER table conn.Open() Dim sql As String = "INSERT INTO Orders " &_ "(storeID, title_id, Qty) VALUES (" & _ cboStoreID.Items(cboStoreID.SelectedIndex) _ & ",'" & _ lblTitleID.Text & "'," & txtQty.Text & ")" Dim cmd As New SqlCeCommand(sql, conn) cmd.ExecuteNonQuery() MsgBox("Title added for " & lblStoreName.Text, _ MsgBoxStyle.Information, "Orders") conn.Close() End Sub 返回消息框证实增加数量。 ![]() 图7 审核订单 点击第二个tab页显示订单,点击Refresh按钮第一个ListBox控件将显示订单。 Private Sub cmdRefresh_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles cmdRefresh.Click '---displays the list of stores available conn.Open() Dim sql As String = "SELECT * FROM Stores" Dim cmd As New SqlCeCommand(sql, conn) Dim reader As SqlCeDataReader = _ cmd.ExecuteReader '---clears the listbox cboStoreIDs.Items.Clear() While reader.Read() cboStoreIDs.Items.Add( _ reader.Item("storeID")) End While conn.Close() End Sub 当一个书店被选中之后,该书店相应的订单就会显示在第二个Listbox控件中。 Private Sub cboStoreIDs_SelectedIndexChanged( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles cboStoreIDs.SelectedIndexChanged '---displays the orders of store selected conn.Open() Dim sql As String = _ "SELECT * FROM Orders WHERE storeID=" & _ cboStoreIDs.Items(cboStoreIDs.SelectedIndex) Dim cmd As New SqlCeCommand(sql, conn) Dim reader As SqlCeDataReader = _ cmd.ExecuteReader() '---clears the listbox cboOrders.Items.Clear() While reader.Read() cboOrders.Items.Add( _ reader.Item("title_id") & " - " & _ reader.Item("qty") & "-copy(ies)") End While conn.Close() End Sub ![]() 图8 最后你也许注意到了,表单的底部没有虚拟键盘,如果使用仿真系统,那么这个缺陷就不那么明显,但在使用真实设备并准备输入查询条件的时候,你会感到很为难,不过不用担心我们可以在表单中添加一个菜单条,不过在这之后不要忘记将控件的位置作一些调整。 使用SQL Server查询分析器 SDE毕竟是Beta1版,他仍然存在一些Bug,在测试应用程序的时候遇到的最大的问题是-Web Sevice没有工作,即当点击查询按钮后,Web Sevice没有响应,这时有一个方法可以检测Web Sevice是否工作,就是Output窗口将显示一些信息,以指明那些线程存在。 ![]() 图9 如果没有这些信息显示,那么Web Sevice就没有被调用,这种情况下,简单的终止应用程序,然后再重新启动他就可以了。 另一个问题是,如果你想知道数据表是否被正确的更新了。SQL Server 2.0引入了类一个被称为SQL Server CE查询分析器(SQL Server CE Query Analyzer)的工具,在应用程序第一次引用SQL Server CE Managed Provider时,SDE将把相关文件拷贝到目标设备,SQL Server CE查询分析器可以通过点击Start->SQLCE Query(如下图)调用。 ![]() 图10 要连接SQL Server CE数据库,点击显示在底部的绿色箭头和圆柱体。 ![]() 图11 这时候你可以连接一个已存在的数据库或创建一个新的数据库。下图显示了我们创建的数据库表和域。 ![]() 图12 要取回表中的数据,我们可以在SQL标签下使用SQL语句,然后在Grid标签下察看输出结果。 ![]() 图13 查询分析器的一个好的特征是"按钮预置",按钮预置功能允许你将常用的SQL语句保存起来,那么下一次调用的时候你只需要简单的点击一下预设的按钮即可。 ![]() 图14 重新设置仿真器 有些时候查询分析器会拒绝工作,这也许只是Beta类产品的自然特性。在很多例子中在仿真器中将软件重新设置即可解决这个问题。一般情况下重新设置软件不会影响数据库,但过于频繁的那么就有可能导致找不到保存的数据库,这时找回他的唯一方式是在Visual Studio .NET中重新编译软件(就像数据库重新创建一样)。 打开和关闭连接 也许你注意到了应用程序在每一个操作前后均要打开或关闭数据库连接。但我发现在现在的Beta版下,当应用还存在的时候连接关闭,仿真器将会发生冲突。 结论 本文讲述了怎样创建使用SDE创建一个调用Web Sevice的Pocket PC应用程序,以及怎样使用SQL Server CE 2.0将信息存储在本地设备上,同时我们也涉及到了SDE的一些缺陷,希望在正是发布的版本中午按能消灭这些Bug。 |
| [] [返回上一页] [打 印] |
文章评论 |









