WindowsPhone7开发中使用SQLCE数据库实例

存储在独立存储文件中,这个
【菜科解读】
在WindowsPhone中有时候我们会一些数据的存储,这个时候我们有两种选择,一种是选择存在的独立存储文件中,一种是存储在数据库中。
存储在独立存储文件中,这个相信很多用都会使用,这里不作为重点,本文主要讲一下在WindowsPhone中使用数据库SQLCE。
下面开始一步一步的带领大家实现在WindowsPhone中使用SQLCE数据库。
(该示例引自WindowsPhone7应用开发)
一、首先,我们需要创建一个EmployeeTable类,映射为数据库中的Employee表
如下:
在创建之前需要添加引用:System.Data.Linq;
同时引入命名空间:usingSystem.Data.Linq.Mapping;
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778[Table]//特性标识该类为映射为数库中的表 //该类实现了INotifyPropertyChanged和INotifyPropertyChanging接口 public class EmployeeTable:INotifyPropertyChanged,INotifyPropertyChanging { private int _employeeId; //将EmployeeID映射为表的主键,特性Column里的含义分别为:主键,自增,int型不为空,不为空等 [Column(IsPrimaryKey = true, IsDbGenerated = true,DbType = "INT NOT NULL Identity", CanBeNull = false, AutoSync = AutoSync.OnInsert)] public int EmployeeID { get{ return _employeeId; } set{ if (_employeeId != value) { NotifyPropertyChanging("EmployeeID"); _employeeId = value; NotifyPropertyChanged("EmployeeID"); } } } private string _employeeName; [Column]//EmployeeName属性为表中EmployeeName字段 public string EmployeeName { get{ return _employeeName; } set{ if (_employeeName != value) { NotifyPropertyChanging("EmployeeName"); _employeeName = value; NotifyPropertyChanged("EmployeeName"); } } } private string _employeeDesc; [Column]//将EmployeeDesc属性映射为表中EmployeeDesc字段 public string EmployeeDesc { get{ return _employeeDesc; } set{ if (_employeeDesc != value) { NotifyPropertyChanging("EmployeeDesc"); _employeeDesc = value; NotifyPropertyChanged("EmployeeDesc"); } } } //定义PropertyChanged事件用来通知页面,表字段数据发生了改变 public event PropertyChangedEventHandler PropertyChanged; private void NotifyPropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } //定义PropertyChanging事件通知数据上下文表的字段数据将要发生改变 public event PropertyChangingEventHandler PropertyChanging; private void NotifyPropertyChanging(string propertyname) { if (PropertyChanging != null) { PropertyChanging(this, new PropertyChangingEventArgs(propertyname)); } } }通过以上的这些操作,我们已经基本上完成了Employee表的创建,映射为数据库中的EmployeeTable表
二、下面我们来新建一个EmployeeDataContext.cs类文件,创建数据库的DataContent,该类继承自DataContent,在该类中定义连接字符串,如下:
首先需要引入命名空间:usingsystem.data.Linq;
public class EmployeeDataContext:DataContext { //数据库连接字符串 public static string DBConnectionString = "Data Source=isostore:/Employee.sdf"; //传递数据库连接字符串到DataContext基类 public EmployeeDataContext(string connectionString):base(connectionString) { } //定义员工信息表 public Table Employees; }三、创建EmployeeCollection类,该类的主要作用为页面数据绑定的集合。
如下:
//绑定页面,进行显示用
public class EmployeeCollection:INotifyPropertyChanged { //用于通知属性的改变 public event PropertyChangedEventHandler PropertyChanged; public void NotifyPropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this,new PropertyChangedEventArgs (propertyName)); } } private ObservableCollection _employeeTables;//创建EmployeeTables属性用来绑定页面数据
public ObservableCollection EmployeeTables { get{ return _employeeTables; } set{ if (_employeeTables != value) { _employeeTables = value; NotifyPropertyChanged("EmployeeTables"); } } } }四、这样一个完整的数据库就创建完毕了,那么我们该如何使用呢?一般的情况下我们都是在程序启动的时候加载数据库,为此我们可以在App.xaml文件的Launching事件中做如下处理:
using (EmployeeDataContext db=new EmployeeDataContext(EmployeeDataContext.DBConnectionString)) { if (db.DatabaseExists() == false) { db.CreateDatabase(); } }五、下面做一个实例进行演示:
页面布局如下:
.cs页的处理代码如下:
public partial class EmployeeShow : PhoneApplicationPage { //创建DataContext用于操作独立的数据库 private EmployeeDataContext employeeDB; private EmployeeCollection employeeCol = new EmployeeCollection();public EmployeeShow() { InitializeComponent(); //创建EmployeeDataContext实例 employeeDB = new EmployeeDataContext(EmployeeDataContext.DBConnectionString); var employeeInDB = from EmployeeTable employee in employeeDB.Employees select employee; //为页面创建数据绑定源 employeeCol.EmployeeTables = new System.Collections.ObjectModel.ObservableCollection(employeeInDB); listBox1.ItemsSource = employeeCol.EmployeeTables; }
//删除信息
private void deleteButton_Click(object sender, RoutedEventArgs e) { var button = sender as Button; if (button != null) { EmployeeTable edelete = button.DataContext as EmployeeTable; // employeeCol.EmployeeTables.Remove(edelete); employeeDB.Employees.DeleteOnSubmit(edelete); employeeDB.SubmitChanges(); } }//保存信息
private void button2_Click(object sender, RoutedEventArgs e) { if (txtname.Text != "" && txtdesc.Text != "") { //编辑状态 if (State.Count > 0 && State["employee"] != null) { EmployeeTable employee = (EmployeeTable)State["employee"]; employee.EmployeeName = txtname.Text; employee.EmployeeDesc = txtdesc.Text; employeeDB.SubmitChanges(); employeeCol.EmployeeTables.Add(employee); State["employee"] = null; } Else//添加新的信息 { EmployeeTable newEmployee = new EmployeeTable { EmployeeName = txtname.Text, EmployeeDesc = txtdesc.Text }; employeeCol.EmployeeTables.Add(newEmployee); employeeDB.Employees.InsertOnSubmit(newEmployee); employeeDB.SubmitChanges(); txtname.Text = ""; txtdesc.Text = ""; } listBox1.ItemsSource = employeeCol.EmployeeTables; } else{ MessageBox.Show("姓名和简介不能为空!"); } }//编辑信息
private void editButton_Click(object sender, RoutedEventArgs e) { var button = sender as Button; if (button != null) { EmployeeTable eedit = button.DataContext as EmployeeTable; txtname.Text = eedit.EmployeeName; txtdesc.Text = eedit.EmployeeDesc; State["employee"] = eedit; employeeCol.EmployeeTables.Remove(eedit); } } }效果如图:
好了,到这里我们已经基本上实现了在WindowsPhone手机中使用SQLCE数据库了,希望可以对朋友们有所帮助。
WindowsPhone7,开发,中,使用,SQLCE,数据太阳连续爆发两次“耀斑”大爆炸?其中一
太阳连续爆发两次“耀斑”大爆炸,其中一次“闪焰”高达X9.3级 太阳打喷嚏!闪焰连4天狂爆发。
太阳闪焰触发地磁暴,中低纬地区将现极光。
太阳爆发12年来最强闪焰。
大型太阳黑子出没!(图/台湾中央气象局) 据ETtoday:美国国家太空总署(NASA)证实,太阳在6日晚连续爆发两次被称为「闪焰」(Solar flare,即太阳耀斑)的大爆炸,其中一次高达X9.3级,打破了12年来的观测纪录,并伴随着太阳质子事件和日冕物质抛射(CME)产生。
专家表示,这2起爆炸所产生的电磁波(日冕物质抛射),预计在8日晚上或9日影响地球,严重时可能导致无线电传输,包括卫星定位系统(GPS)的暂时性故障,和大规模的停电事件。
NASA在6日侦测到两次太阳闪焰,这两起爆炸时间,分别是美东时间6日清晨5时10分与上午8时3分(台湾时间6日下午5时10分与晚间8时3分)。
第一次为X2.2级,而第2次则高达X9.3级,是12年来最大规模。
据维基百科的资料,历史上最强大的闪焰出现在1859年9月,在当时用肉眼就可以直接观察得到,许多电报机也突然起火燃烧。
中国中科院国家空间科学中心表示,本次太阳闪焰爆发,是由一个代号为AR2673的太阳黑子群所引发。
该黑子群从3日以来,在5天时间内已经爆发了10多次太阳闪焰,其中,在4日爆发的太阳闪焰还伴随着日冕物质抛射,并直接导致了中等太阳质子事件。
有专家表示,本次太阳闪焰爆发伴随的日冕物质抛射(电磁波)可能于明晚或后天到达地球,将会引起地球磁层、电离层和高层大气强烈的扰动,这种巨大的空间环境扰动将可能影响到卫星以及太空船的性能和安全。
太阳闪焰会强烈的影响地球附近的太空天气,产生携带高能量的微粒的太阳风,菜叶说说,就是所谓的太阳质子事件,这些粒子会影响地球磁场,2016年曾有29只抹香鲸在荷兰、英国的外海搁浅死亡,科学家就曾怀疑是闪焰造成磁场出现短期改变,使得抹香鲸游往错误方向。
据了解,日冕物质抛射是指太阳表面释放出大量的物质与电磁辐射进入太空,如果抛射方向朝向地球,可能会扰乱无线电传输和对人造卫星与输电线路造成损害,导致大规模的停电事件。
相关报道:太阳打喷嚏!「闪焰」狂爆触发地磁暴 中低纬将现极光 菜叶说说 据ETtoday:最强太阳闪焰喷发!台北天文馆发布观测讯息,指大型黑子出没,6日晚间爆发强烈闪焰,等级高达X9.3,是12年以来威力最强,导致欧洲等中高纬度地区短波无线电中断。
而这次闪焰也触发了一个正对地球而来的日冕物质喷发,预估8日抵达地球,可能引起地磁暴,引响发电设施、卫星等,甚至会出现美丽极光景象! 美国国家航空暨太空总署(NASA)公布照片,指太阳从4日开始已经喷发10多次闪焰,7日喷发2次高强度闪焰,第一次在美东时间上午6时15分,第2次则是上午10时36芬,更是达到巅峰强度;其中6日的2次闪焰,有害辐射虽无法通过大气层对人类造成影响,但只要足够强大,将可能干扰GPS通讯及信号传播。
台北天文馆7日也发布观测资讯,AR 2673黑子群在台北时间6日晚间8时2分爆发强烈闪焰,等级高达X9.3,是自2005年9月7日以来威力最强的太阳闪焰,爆发时所发出的X射线和紫外射线冲击到地球高层大气后,造成欧洲、非洲和大西洋(600558) 地区发生短波无线电讯号中断的现象。
#p#分页标题#e# 天文馆进一步解释,最新的SOHO太阳观测卫星(Solar and Heliospheric Observatory)C3日冕仪观测影像证实这次闪焰爆发也触发了一个正对地球而来的日冕物质喷发(coronal mass ejection,CME)。
大量电浆云朝地球奔驰而来,估计将在8日抵达,可能引起G2-G3等级的地磁暴,发电设施、卫星控制中心和航空公司需密切注意发展,而极光观测者在本周可能等到美丽的极光景象。
研究显示,1859年9月1日至2日的卡林顿事件(Carrington Event),不仅强到在白光波段的太阳投影影像都可记录到黑子群周边变亮的现象,同时在全球许多地方都可见极光,可见区域甚至延伸到低磁纬地区,包括古巴,非常罕见;强烈爆发同时引起欧洲和北美洲的电报系统失败,甚至引起电报机起火、电报塔的架子也发出火花,使欧美地区的通讯中断了数天之久。
事实上,太阳闪焰是太阳表面最剧烈的一种爆发现象,会在短时间内释放大量能量,并向外发射大量电磁辐射,就像是太阳打了一个「喷嚏」。
若喷嚏正对地球,大量带电粒子轰击地球,可能会对地球产生影响。
这次发生的X级爆发能量异常强大,所放出的辐射和粒子冲向地球后,和地球磁场和电离层相互作用,可能干扰无线电通讯、GPS导航,除了两极之外的更低纬度地区可能出现极光,甚至对太空人和卫星安全构成威胁。
中国有锁龙井吗?
比较出名的有《故宫闹鬼事件》《锁龙井灵异事件》《北顶娘娘庙事件》《朝内81号凶宅》等等关于北新桥锁龙井灵异事件,有很多传说故事。
北新桥位于,东直门内大街西端,交道口东街东端,东四北大街北端,雍和宫大街南端汇合的十字路口,属于东城区,北新桥街道办事处管辖。
在北京民间,自古便流传着一个传说,传闻在北新桥的位置,有一口井,井的深处还有一头被铁链锁着的孽龙,后世,将这口井称为锁龙井。
传说井下还有一个海眼,海眼直通渤海,谁要是动了泉眼,整个北京城就要被大水淹了。
在后来,陈市建设,由于这口井碍事,工人于是打算将井填了,不过打开井盖后,却看到里头有一条手臂粗的铁链,井深不见底,当时的人很迷信,都说不要动,但是也有好事胆大的,非要看看铁链下到底有什么,于是开始向上拉铁链,铁链越拉越多,却没有到头的意思,同时听见井底发出隆隆的沉闷响声,工人们害怕了,将铁链又放了回去,最后用大石条盖上。
此外,据说,在日军侵略期间,也曾发生过类似的事情,相传,在1937年,日军在北平西南卢沟桥附近演习时,借口一名士兵失踪,入侵占领了北平,而后在全城搜索时,在北京北新桥的位置发现了一口奇怪的井,便以为井里藏有中国士兵。
所以强迫老百姓拉铁链,老百姓拉了三天三夜,也没有尽头,拉出来的铁链摆的满大街都是,日军不信邪,还让继续往上拉,这时井里突然往上反黑水,同时还有类似牛叫的声音,吓的日军也不敢在往上拉了,把铁链又顺了回去。
而现在之所以找不到锁龙井,是应为城市建设需要,在原址上盖起了商店,起地基的时候把那口井给绕过去了,井的正上方,有一间小屋子,常年锁着,类似的传闻在民间和野史中广泛流传。
莫非真的存在着这么一口神秘的古井,井里头又锁着一条活龙,可是反过来想,又有些不太对劲,既然锁龙井被传得那么邪乎,为什么没有专家前往一探究竟,为什么在各种传说的背后,铁链都只是拉到一半又放回去呢?当神秘与疑惑相杂糅,便如同夜幕下的迷雾,让人真假难辨。
据民间故事(姚广孝禽龙记)记载,北新桥锁龙井最初是起源于明朝,相传,当年朱棣夺位称帝后,便准备将都城由南京迁往北平,于是先派遣姚广孝负责修缮北京城,姚广孝入京后,意外发现了城内有九处海眼,内部泉眼直通大海,其中两处最大,一口在京西五泉山下,被白塔镇着,还有一口在北新桥,由于没有镇压之物,内部常有孽龙出来作怪,于是姚广孝连同宋朝岳将军的英灵制服孽龙,将孽龙锁入井中,,井上还建了一座岳飞庙,用于镇压孽龙,这就是北新桥锁龙井的由来。
锁龙井也称锁蛟井,是中国神话故事里的一个实物性内容,反映人们数千年的治水理想,是中华文化里一个重要现象。
最早的神话传说是禹王锁蛟龙,相关的有禹州的禹王锁蛟井、济南市舜井、淮阴龟山支祁井、重庆市巫山县锁龙村的锁龙柱等文化传说地。
另外,北京市的北新桥、潭柘寺及其它省份也有锁龙井(锁蛟井)传说。
北京的北新桥锁龙井据说刘伯温和姚广孝两个人建立了北京城,完工之后发现有几口海眼,一直通向大海。
其中两口比较大的,一个在京西玉泉山镇在一个大庙下面,另一个在北海被白塔镇着。
还有较大的在东直门的北新桥。
当时为防止水患,抓了一条龙锁在了海眼里,刘伯温、姚广孝把孽龙锁在北京北新桥的海眼里,海眼上修一个深深的井筒子,拴上长长的大锁链,井上再修一座三间大殿的庙宇。
庙里供什么神像呢?姚广孝想起帮他拿住龙公的不是岳元帅吗,就供岳飞吧。
龙公在被锁进海眼之前的时候问道:姚军师,难道要关我一千年、一万年吗?什么时候我才能出来呀?姚广孝说:等这座桥旧了,修起桥翅儿来,就是你的出头之日。
打这儿起,这里就叫了北新桥,北新桥从来也没有过什么桥翅儿。
姚广孝又把龙子锁在崇文门镶桥下的海眼里,龙子也问:姚军师,难道关我一千年、一万年吗?我什么时候才能出来呀?姚广孝说:只要你听见开城门的时候打碘,就可以出来了。
打这儿起,崇文门开城、关城不再打碘,一律改为打钟。
老年人都说:北京城九门八碘一口钟啊。
人们看到北新桥北边还有一座镇海寺,就更信这个传说了。
当年日本人占据了北京城后,让当地百姓拉过井里的铁链,铁链子拉上来铺了一地也不见头,日本人不死心让继续拉,老百姓继续拉,拉着拉着井里开始往上反黑水并且还有怪叫声,日本人这回吓着了,让老百姓把铁链子又放了回去。
第二次是红卫兵破四旧。
也把大铁链子往上拉,结果根日本人一样。
也全吓傻了,赶紧恢复了原貌。
最近一次跟北新桥海眼有关的事是2004年修地铁5号线,修建期间打开了传说中的锁龙井遇事故,后被迫绕道而行 。
此事新闻里还播了,说是为了不破坏北新桥的一口古井,地铁绕了多少多少公里。
现在的科学家都不敢去碰它。