sqlce資料庫
⑴ 用vs2008在wince連接sqlce,然後同步到本地的sql2000
朋友,我現在實習的公司就是 vs2008 開發WINCE5.0 系統軟體的,資料庫用的是 sqlce 跟 sqlite 這兩種,sqlce 的資料庫 擴展名是 .sdf 所以連接的話
Data Source='資料庫絕對路徑'; 這樣就夠了。
如何你想同步的話, 就要在電腦端做一個 WINFORM 程序,先連接 sqlce資料庫,讀到 DataTable 中 ,然後連接到 sql 2000 ,將DataTable 中的記錄添加進去就OK了
這里說一聲,我同步的是 Sql 2005的
如果有什麼不懂可聯系我
⑵ Windows store app 數據存儲的幾種方法
在開發過程中,我們需要將某些數據保存下來,比如一些設置信息以及一些用戶主動去保存的數據。待用戶下次打開應用時候,再自動載入這些信息。下面將介紹windows8開發中如何存儲數據。
一.本地數據存儲
在wp中我們使用IsolatedStorageSettings進行本地數據存儲,在win8中也提供類似的方法進行存儲,我們使用ApplicationData.Current.LocalSettings。下面將通過實例進行描述:
在節目上添加姓名、年齡、性別三個控制項,代碼如下:
1 <Grid Background="{StaticResource }">
2 <StackPanel Margin="40,40,0,0">
3 <StackPanel Orientation="Horizontal" Height="80">
4 <TextBlock Text="姓名:" Style="{StaticResource BasicTextStyle}" FontSize="20" VerticalAlignment="Center"/>
5 <TextBox x:Name="txtName" Text="" FontSize="24" Width="200" Height="40"/>
6 </StackPanel>
7 <StackPanel Orientation="Horizontal" Height="80">
8 <TextBlock Text="年齡:" Style="{StaticResource BasicTextStyle}" FontSize="20" VerticalAlignment="Center"/>
9 <TextBox x:Name="txtAge" Text="" FontSize="24" Width="200" Height="40"/>
10 </StackPanel>
11 <StackPanel Orientation="Horizontal" Height="80">
12 <TextBlock Text="性別:" Style="{StaticResource BasicTextStyle}" FontSize="20" VerticalAlignment="Center"/>
13 <ComboBox x:Name="cbxSex" Height="40" Width="200" SelectedIndex="1">
14 <ComboBoxItem>男</ComboBoxItem>
15 <ComboBoxItem>女</ComboBoxItem>
16 </ComboBox>
17 </StackPanel>
18 <StackPanel Orientation="Horizontal">
19 <Button Content="保存" Width="100" Height="40" FontSize="16" Click="btnSave_Click"></Button>
20 <Button Margin="20,0,0,0" Content="讀取" Width="100" Height="40" FontSize="16" Click="btnRead_Click"></Button>
21 <Button Margin="20,0,0,0" Content="清空" Width="100" Height="40" FontSize="16" Click="btnClear_Click"></Button>
22 </StackPanel>
23 </StackPanel>
24 </Grid>
新建類AppDataHelper.cs,引用命名空間using Windows.Storage。我們將讀取和保存封裝成共通,方便調用。
保存數據:
1 /// <summary>
2 /// 保存數據
3 /// </summary>
4 /// <typeparam name="T">數據類型</typeparam>
5 /// <param name="key">鍵</param>
6 /// <param name="value">值</param>
7 public static void Save<T>(string key, T value)
8 {
9 ApplicationData.Current.LocalSettings.Values[key] = value;
10 }
讀取數據:
1 /// <summary>
2 /// 讀取數據
3 /// </summary>
4 /// <typeparam name="T">數據類型</typeparam>
5 /// <param name="key">鍵</param>
6 /// <returns>值</returns>
7 public static T Read<T>(string key)
8 {
9 if (ApplicationData.Current.LocalSettings.Values.ContainsKey(key))
10 {
11 return (T)ApplicationData.Current.LocalSettings.Values[key];
12 }
13 else
14 {
15 return default(T);
16 }
17 }
刪除數據:
1 /// <summary>
2 /// 移除數據
3 /// </summary>
4 /// <param name="key">鍵</param>
5 /// <returns>成功true/失敗false</returns>
6 public static bool Remove(string key)
7 {
8 return ApplicationData.Current.LocalSettings.Values.Remove(key);
9 }
我們只要在需要存儲或者讀取數據的地方進行調用,就可以了。
1 private void btnSave_Click(object sender, RoutedEventArgs e)
2 {
3 AppDataHelper.Save<string>("name", txtName.Text.Trim());
4 AppDataHelper.Save<int>("age", int.Parse(txtAge.Text.Trim())); 5 AppDataHelper.Save<int>("sex", cbxSex.SelectedIndex);
6 }
7 private void btnRead_Click(object sender, RoutedEventArgs e)
8 {
9 txtName.Text = AppDataHelper.Read<string>("name");
10 txtAge.Text = AppDataHelper.Read<int>("age").ToString();
11 cbxSex.SelectedIndex = AppDataHelper.Read<int>("sex");
12 }
那麼我們保存的數據保存到哪裡去了呢?我們應該如何找到他們,別急,我們下面開始找保持的數據。
打開C:\Users\\AppData\Local\Packages\ \Settings\settings.dat, user_name對應當前登錄的用戶名,packpage對應此應用的唯一標識,在Package.appxmanifest中我們可以找到它:
此文件為.dat後綴,我們需要用注冊表工具打開它,開始->運行(win+R鍵),輸入Regedit,在打開的窗口裡面選擇 HKEY_LOCAL_MACHINE,
然後選擇文件->載入配置單元,選擇settings.dat文件,打開填入項名稱,確定之後可以看到保存的數據會顯示在其中。
雙擊name,打開,我們可以看到存儲的數據值。
那麼我們是否能像wp那樣存儲一個對象到本地存儲呢,答案是否定的。win8中只能存儲一些簡單類型,如int、bool、string等
下面有一個Person對象:
1 [DataContract]
2 public class Person
3 {
4 [DataMember]
5 public string Name { get; set; }
6 [DataMember]
7 public int Age { get; set; }
8 [DataMember]
9 public int Sex { get; set; }
10 }
進行存儲:
1 Person person = new Person()
2 {
3 Name = txtName.Text.Trim(),
4 Age = int.Parse(txtAge.Text.Trim()),
5 Sex = cbxSex.SelectedIndex
6 };
7 AppDataHelper.Save<Person>("person", person);
此時會報錯,提示不支持此類型存儲。
那麼我們應該如何存儲一個對象呢?下面我們將介紹文件存儲。
二.文件存儲
對於那些比較復雜的數據類型,我們需要將其存儲為文件的形式存儲在應用中。StorageFile的存儲,以文件的形式進行存儲存入數據。
新建一個類,LocalFileHelper.cs
存儲文件:
1 /// <summary>
2 /// 存儲數據/// </summary>
3 /// <typeparam name="T">數據類型</typeparam>
4 /// <param name="fileName">文件名稱</param>
5 /// <param name="data">數據</param>
6 /// <returns>無</returns>
7 public async static Task Save<T>(string fileName, T data)
8 {
9 //取得當前程序存放數據的目錄
10 StorageFolder folder = Windows.Storage.ApplicationData.Current.LocalFolder;
11 //創建文件,如果文件存在就覆蓋
12 StorageFile file = await folder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);
13 using (Stream newFileStream = await file.OpenStreamForWriteAsync())
14 {
15 DataContractSerializer ser = new DataContractSerializer(typeof(T));
16 ser.WriteObject(newFileStream, data);
17 newFileStream.Dispose();
18 }
19 }
讀取文件:
1 /// <summary>
2 /// 讀取數據
3 /// </summary>
4 /// <typeparam name="T">數據類型</typeparam>
5 /// <param name="fileName">文件名稱</param>
6 /// <returns>數據</returns>
7 public async static Task<T> Read<T>(string fileName)
8 {
9 T t = default(T);
10 try
11 {
12 StorageFolder folder = Windows.Storage.ApplicationData.Current.LocalFolder;
13 StorageFile file = await folder.GetFileAsync(fileName);
14 if (file == null)
15 return t;
16 Stream newFileStream = await file.OpenStreamForReadAsync();
17 DataContractSerializer ser = new DataContractSerializer(typeof(T));
18 t = (T)ser.ReadObject(newFileStream);
19 newFileStream.Dispose();
20 return t;
21 }
22 catch (Exception)
23 {
24 return t;
25 }
26 }
刪除文件:
1 /// <summary>
2 /// 刪除文件
3 /// </summary>
4 /// <param name="fileName">文件名稱</param>
5 /// <returns>成功true/失敗false</returns>
6 public async static Task<bool> Delete(string fileName)
7 {
8 StorageFolder folder = Windows.Storage.ApplicationData.Current.LocalFolder;
9 StorageFile file = await folder.GetFileAsync(fileName);
10 if (file != null)
11 {
12 try
13 {
14 await file.DeleteAsync();
15 }
16 catch (Exception)
17 {
18 return false;
19 }
20 }
21 return true;
22 }
使用方法:
1 Person person = new Person()
2 {
3 Name = txtName.Text.Trim(),
4 Age = int.Parse(txtAge.Text.Trim()),
5 Sex = cbxSex.SelectedIndex
6 };
7
8 await LocalFileHelper.Save<Person>("person.xml", person);
9
10 List<Person> list = new List<Person>();
11 list.Add(person);
12 list.Add(person);
13 await LocalFileHelper.Save<List<Person>>("personList.xml", list);
14
15
16 Person newPerson = await LocalFileHelper.Read<Person>("person.xml");
17 List<Person> personList = await LocalFileHelper.Read<List<Person>>("personList.xml");
文件在哪裡?
同樣我們打開C:\Users\user_name\AppData\Local\Packages\package\LocalState文件夾,下面就有我們保持的文件,打開文件,保存文件的內容格式為xml:
<Person xmlns="http://schemas.datacontract.org/2004/07/StorageSample" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><Age>
27</Age><Name>BetterChaner</Name><Sex>0</Sex></Person>
三.使用Sqlite進行數據存儲
Sqlite現已提供對Windows RT和Windows 8 Metro應用的支持.
首先,在工具,選擇擴展與更新中,選擇聯機,在搜索框內輸入sqlite,找到SQLite for Window Runtime,下載安裝。
安裝完成之後重啟VS,右擊項目添加引用,選擇Windows->擴展,找到Mircosoft visual c++ runtime package和sqlite for windows runtime,打勾,確定。
由於目前Sqlite不支持AnyCPU,所以我們將項目改成X64,右擊解決方案,屬性,修改之。
然後右擊引用,選擇管理Nuget程序包,聯機搜索sqlite-net,下載安裝。
我們發現項目工程中多了2個類文件,SQLite.cs和SQLiteAsync.cs
基本操作:
1 //創建資料庫
2 string dbRootPath = Windows.Storage.ApplicationData.Current.LocalFolder.Path;
3 SQLiteConnection db = new SQLiteConnection(Path.Combine(dbRootPath, "myApp.sqlite"));
4
5 //創建表
6 db.CreateTable<Person>();
7
8 //插入一條數據
9 db.Insert(new Person() { Name = "BetterChaner", Age = 27, Sex = 1 });
10
11 //插入多條數據
12 List<Person> list = new List<Person>();
13 list.Add(new Person() { Name = "Zhangsan", Age = 27, Sex = 1 });
14 list.Add(new Person() { Name = "Lisi", Age = 32, Sex = 0 });
15 list.Add(new Person() { Name = "Wangwu", Age = 24, Sex = 1 });
16 db.InsertAll(list);
17
18 //查詢數據
19 List<Person> list2 = db.Query<Person>("select * from Person");
20
21 //更新數據
22 SQLiteCommand cmd = db.CreateCommand("update Person set Age=21 where Name='Lisi'");
23 cmd.ExecuteNonQuery();
24
25 //刪除一條數據
26 db.Delete(new Person() { Name = "Zhangsan", Age = 27, Sex = 1 });
27 //刪除全部數據
28 db.DeleteAll<Person>();
數據存儲的位置為:C:\Users\\AppData\Local\Packages\ \LocalState\文件夾下的myApp.sqlite
四.SqlCE
有了Sqilte,SqlCE不太經常會用到了,在這里就不寫出實例了,與wp中類似。
小結
以上為windows store app開發中可以使用的幾種存儲數據的方式,可以根據數據大小、作用以及類型選擇應該使用哪一種存儲方式。
⑶ sdf是什麼資料庫的備份文件
sqlce資料庫,