Windows Mobile 5.0訪問Sql Server 3.5(1)

來源:互聯網
上載者:User
因為個人原因,好久沒寫blog。對於移動開發方面的變化只能用日新月異來形容阿。WM7也很快就要推出了,Sql Server CE 都到3.5了,真是跟不上步伐阿。

這篇文章就從如何開始用WM5.0開發基於Sql Server CE 的應用程式吧。

下面先簡單介紹下Sql Server CE 的基礎吧:
SQL Server 2005 Compact Edition(縮寫為SQL Server CE)是微軟推出的一個適用於嵌入到行動裝置 App裝置的精簡資料庫產品,Windows Mobile開發人員能夠使用SQL Server CE開發出將資料管理能力延展到Window Mobile行動裝置上的應用程式。SQL Server CE不但提供了完整的SQL文法,包括內部聯結、外部聯結和子查詢,還內建了資料同步技術的支援。有一點要注意的是,SQL Server 2005 Compact Edition除了可以作為移動資料庫在Windows Mobile裝置上運行外,它也支援在PC上存放資料,為案頭的應用程式提供資料支援。但可惜貌似不支援視圖、預存程序等。

在資料中查到SQL Server CE資料庫引擎還提供了兩個非常重要的技術,那就是遠端資料存取和合併式複寫。這兩種方法都是用來實現與遠端資料庫進行資料同步的,使得我們可以很容易將遠端資料庫中的資訊載入到裝置端的SQL Server CE資料庫中,此外我們還可以在離線狀態下對SQL Server CE資料庫進行插入、刪除、更新等修改操作,最後就可以將修改後的資料回傳到遠端資料庫中,確保了裝置端和伺服器端的資料同步。(在後續文章中會做進一步的講述)

基礎的概述了一番,那從Demo入手,體驗一下究竟Sql Server CE吧。
開發環境:VS2008
開發語言:C#
資料庫:Sql Server CE3.5
這裡使用 VS2008作為開發環境,偷懶了一次。以後文章將使用VS2005的開發環境。

開啟VS2008,選擇Smart Device,然後在右上方選擇.net Framework 2.0,建立一個基於.net Framework2.0的應用程式。

選擇平台類型(PPC/Smartphone),這裡我選擇了PPC。注意下面選項中還能選擇使用CF2.0還是CF3.5,這裡選擇2.0。

工程建立完畢後,你建立一個Form程式時,就會出現相應的模擬器裝置。

接著添加一個資料庫,在項目工程介面,添加一個資料庫。

這時候,會探索資料庫檔案的尾碼名怎麼變成.sdf了。然後,再建立一個對應的DataSet,用來快速開發。(本篇文章主要描述某些功能,實際項目中開發不做參考)
建立好表後,將表拖動到DataSet中,VS會自動產生對應的Adapt和強型別的DataSet。
然後在Form中,拖入一個DataGrid,將DataGrid的Dock設為Fill。大家開發WM時,最好設定Dock,因為這樣控制項會隨著裝置的變化而自動調整,WM可以側過來使用的。

有了資料容器後,自然要綁定資料。
首先,對DataGrid進行設定,這裡的DataGrid因為是CF版本,很多屬性和方法都比WinForm上的要少很多。
先添加一個TabStyle,用於設定綁定一個DataTable。這裡要將GenerateMember設為False,並指定好MappingName(表名)。

添加列,在GridColumnStyles中添加,我添加2列dataGridTextColumn,並將GenerateMember設為False,並同樣指定好MappingName(列名)。

在Form_Load事件中,用Adapt填充一個table,然後對DataGrid綁定。
如果,在前面沒有設定好TableStyle和ColumnStyle的MappingName,這裡綁定時,會多出一些列。

這就是不想要的效果。

這就是想要的效果。

DataGrid無法設定某個列的Visible,沒有該屬性。所以只能通過該方法來屏蔽掉一些列。

DataGrid無法直接進行編輯,那我們如何進行編輯呢,我的處理方式如下:
建立一個Form,將選中的某行資訊,作為參數傳入到編輯Form,該Form上編輯完後,再回傳取得資料即可。

簡單的資料庫訪問的應用程式就算做完了。代碼如下:

Code
 1using System;
 2
 3using System.Collections.Generic;
 4using System.ComponentModel;
 5using System.Data;
 6using System.Drawing;
 7using System.Text;
 8using System.Windows.Forms;
 9
10namespace SmartDeviceProject1
11{
12    public partial class Form1 : Form
13    {
14        private AppDatabase1DataSet.Sys_UserDataTable table;
15        AppDatabase1DataSetTableAdapters.Sys_UserTableAdapter adapt;
16
17        public Form1()
18        {
19            InitializeComponent();
20        }
21
22        private void menuItem4_Click(object sender, EventArgs e)
23        {
24            Application.Exit();
25        }
26
27        private void menuItem3_Click(object sender, EventArgs e)
28        {
29            adapt = new SmartDeviceProject1.AppDatabase1DataSetTableAdapters.Sys_UserTableAdapter();
30            adapt.Fill(table);
31            this.dataGrid1.DataSource = table;
32        }
33
34        private void Form1_Load(object sender, EventArgs e)
35        {
36            table = new AppDatabase1DataSet.Sys_UserDataTable();
37        }
38
39        private void menuItem5_Click(object sender, EventArgs e)
40        {
41            if (adapt == null)
42                adapt = new SmartDeviceProject1.AppDatabase1DataSetTableAdapters.Sys_UserTableAdapter();
43
44            MessageBox.Show("Effect rows are " + adapt.Update(table).ToString());
45        }
46
47        private void menuItem6_Click(object sender, EventArgs e)
48        {
49            //Form2是編輯Form,通過傳入值後,在該Form中修改,然後再去取得資料,寫入DataTable中。
50            Form2 form = new Form2();
51            form.User_ID = table[this.dataGrid1.CurrentCell.RowNumber].User_Id;
52            form.User_Name = table[this.dataGrid1.CurrentCell.RowNumber].User_Name;
53            form.Mail = table[this.dataGrid1.CurrentCell.RowNumber].Mail;
54            form.ShowDialog();
55
56            if (form.IsSave)
57            {
58                table[this.dataGrid1.CurrentCell.RowNumber].User_Id = form.User_ID;
59                table[this.dataGrid1.CurrentCell.RowNumber].User_Name = form.User_Name;
60                table[this.dataGrid1.CurrentCell.RowNumber].Mail = form.Mail;
61            }
62        }
63    }
64}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.