利用RDA实现SQL CE与桌面SQL Server数据库间的数据存取
2010-06-16 15:43:51 来源:WEB开发网当单击”登录”按钮时,程序首先在智能设备上创建SQL Server CE本地数据库sdf文件,本程序下载的所有表都保存在该数据库中:
'根据指定的sdf文件路径创建本地的用户数据库文件用于RDA的PULL
en=NewSqlCeEngine("DataSource="&LocalDatabaseFile)
en.CreateDatabase()
然后创建RDA对象的实例,并填写用于和远程SQL Server CE Server Agent 通信的相关信息。下载允许登录PPC的合法的用户信息数据到本地表:
rda.Pull("UserInfo","Select*fromemployeewhereemp_id='"+EMPId+
"'andemp_password='"+Password+"'",RemoteConnString,RdaTrackOption.TrackingOff)
UserInfo表返回的是就是登录用户的记录信息,请注意RdaTrackOption的值为TrackingOff,因为我们没有在PPC上设置更改用户信息的操作,所以没必要跟踪该表。如果用户名和密码验证通过,UserInfo表的记录数就为1,也就是大于0,否则没有记录,然后我们通过使用SqlCeConnection、SqlCeDataAdapter、SqlCeDataReader以及DataTable返回UserInfo表的所有记录,一旦记录数为0则不允许登录:
IfdtLocalUserInfo.Rows.Count>0Then'验证通过
CurrentLogonUserID=dtLocalUserInfo.Rows(0).Item("emp_id").ToString
CurrentLogonUserName=dtLocalUserInfo.Rows(0).Item("emp_name").ToString
ReturnTrue
Else '验证失败,返回false
ReturnFalse
EndIf
登录成功后根据登录用户名只返回其相关的任务记录,并将任务记录保存在名为” itemlist”的表中:
rda.Pull("itemlist","Select*fromitemlistwhereemp_id='"+EMPId+
"'",RemoteConnString,RdaTrackOption.TrackingOnWithIndexes)
由于RDA不会保持记录锁,push操作会无条件的将所有数据改动都应用到SQL Server中,所以容易引起当前数据库的其他用户的更新数据的丢失。我们需要按照一定的筛选条件过滤我们感兴趣的记录,以便获取唯一且不同于其它用户返回的记录集。TrackingOnWithIndexes说明在PPC上对任务状态的更改将会被跟踪,在后面的同步操作时会根据跟踪的变化将更改更新到远程数据库中。
任务记录成功获得后,我们隐藏登录用Panel而将操作用Panel置于顶层用于对任务记录的添加、状态更新、删除已经同步操作等。
用listview控件来显示任务记录,我们遍历返回的itemlist表,每一条记录创建一个ListViewItem,并添加到listview中以便显示:
WhileReader.Read
DimlsAsNewListViewItem(Reader.Item("ID").ToString)
ls.SubItems.Add(Trim(Reader.Item("TaskName").ToString))
ls.SubItems.Add(Trim(Reader.Item("TaskContent").ToString))
ls.SubItems.Add(Reader.Item("Finished").ToString)
lvItemList.Items.Add(ls)
EndWhile
更多精彩
赞助商链接