日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

基于sql server ce的移動服務(wù)系統(tǒng)開發(fā)...

 accesine 2005-08-24

移動服務(wù)系統(tǒng)分析與設(shè)計

移動服務(wù)系統(tǒng)需求分析

  移動服務(wù)是應(yīng)用比較廣泛的移動解決方案,其核心是利用移動計算和無線通信技術(shù)為企業(yè)現(xiàn)場服務(wù)人員提供全面、便捷、實時的信息服務(wù)。我們現(xiàn)在就為某電器制造商設(shè)計一套用于售后維修服務(wù)的移動解決方案。

  該電器制造商目前售后維修服務(wù)的基本工作流程是:客戶打電話報修,呼叫中心記錄用戶的基本信息(如姓名、地址和電話等等)和客戶對故障的描述信息,生成維修單,維修服務(wù)人員領(lǐng)取維修單,維修服務(wù)人員上門為客戶服務(wù),填寫維修記錄單(如實際故障,維修所用零部件,維修所用時間等),客戶簽字認(rèn)可,維修服務(wù)人員交回維修記錄單,呼叫中心電話回訪客戶。

  采用移動服務(wù)系統(tǒng)改造后的工作流程是:客戶打電話報修,呼叫中心記錄用戶的基本信息和客戶對故障的描述信息,生成維修單,維修單通過無線網(wǎng)絡(luò)直接發(fā)送到維修服務(wù)人員的手持設(shè)備上,維修服務(wù)人員上門為客戶服務(wù),在移動設(shè)備上填寫維修記錄單,客戶在移動設(shè)備上簽字認(rèn)可,維修服務(wù)人員把維修記錄單通過無線網(wǎng)絡(luò)發(fā)回至呼叫中心,呼叫中心電話回訪客戶。

  通過上述新舊流程的對比,可以發(fā)現(xiàn)采用移動服務(wù)系統(tǒng)之后將顯著的提升維修服務(wù)人員的工作效率,大大縮短客戶報修之后的響應(yīng)時間,對于提升售后服務(wù)的質(zhì)量和客戶滿意度都有極大的益處。

移動服務(wù)系統(tǒng)設(shè)計

移動數(shù)據(jù)庫SQL Server CE

  因為移動服務(wù)系統(tǒng)需要下載維修單到移動設(shè)備上,并在移動設(shè)備上臨時保存維修單,所以在移動設(shè)備上需要有一個數(shù)據(jù)庫系統(tǒng)。我們選擇的移動數(shù)據(jù)庫系統(tǒng)是SQL Server CE。

  Microsoft SQL 2000 Windows CE Edition(又稱為SQL Server CE)是用于移動設(shè)備上的小型關(guān)系數(shù)據(jù)庫。SQL Server CE的發(fā)展歷程從1.0開始,當(dāng)時.NET的技術(shù)框架還不能應(yīng)用到移動設(shè)備上,這個時候大家在開發(fā)基于數(shù)據(jù)庫的移動應(yīng)用時,采用的是Embedded Visual Tools 3.0中的VB或VC++,使用OLE DB for SQL Server CE或ADOCE訪問SQL Server CE數(shù)據(jù)庫。隨著.NET Compact Framework的推出,SQL Server CE也推出了2.0,2.0加入了更多的新功能,并在很多性能參數(shù)都有較大的提高,但更重要的是從此可以在Visual Studio .NET中通過ADO.NET訪問SQL Server CE的數(shù)據(jù)庫了。

  SQL Server CE與我們熟悉的其他關(guān)系數(shù)據(jù)庫相比,有以下的特點:

  1) 打開SQL Server CE數(shù)據(jù)庫時,是通過指定其數(shù)據(jù)庫文件所在的完整路徑來打開的。例如,當(dāng)在EVB中使用ADOCE打開數(shù)據(jù)庫時,可以用下面的形式:

Dim cn As ADOCE.Connection
Set cn = CreateObject("ADOCE.Connection.3.1")
cn.ConnectionString = "Provider=Microsoft.SQLSERVER.OLEDB.CE.2.0; data source=\Northwind.sdf"
cn.Open

  2) SQL Server CE支持?jǐn)?shù)據(jù)庫密碼和數(shù)據(jù)庫文件加密

  例如,當(dāng)使用.NET Compact Framework中的SqlCeConnection.Open方法打開數(shù)據(jù)庫時,可以使用如下的連接字符串:

"data source=\NorthWind.sdf; password=<myPassword>"

  當(dāng)使用ADOCE時,則在連接字符串中必須指定SSCE:Database Password連接屬性。

"Provider=Microsoft.SQLSERVER.OLEDB.CE.2.0; data source=\NorthWind.sdf; SSCE:Database Password=<myPassword>"

  3) SQL Server CE同樣支持大量的內(nèi)部函數(shù),這些函數(shù)包括數(shù)學(xué)函數(shù)、字符串函數(shù)和內(nèi)部函數(shù)等。

  4) SQL Server CE 2.0 通過 ADO.NET 增加了對參數(shù)化查詢的支持。

  例如,我們在構(gòu)造SQL語句時,可以構(gòu)造以下的語句,然后再利用ADO.NET的機(jī)制替換“?”所代表的參數(shù)。對參數(shù)化查詢的支持是 SQL Server CE 2.0的新功能。

  "INSERT INTO TableA (col1, col2) VALUES (?, ?)"

  5) 與先前版本的SQL Server CE相比,新版本的另一個改進(jìn)是加入了更加可靠的錯誤處理功能。SQL Server CE增加了一個名為SqlCeException的新類,這個類允許您捕捉本機(jī)SQL Server CE錯誤并適當(dāng)?shù)靥幚硭鼈儭?/P>

  6) SQL Server CE 2.0提供了兩種基本方法來連接后端SQL Server數(shù)據(jù)庫:RDA和合并復(fù)制。RDA訪問功能支持與SQL Server 7.0(和更高版本)數(shù)據(jù)庫的連接,合并復(fù)制要求后端必須是SQL Server 2000。

數(shù)據(jù)同步設(shè)計

  移動服務(wù)系統(tǒng)需要下載呼叫中心產(chǎn)生的維修單,也需要把維修服務(wù)人員填寫的維修記錄單上傳到呼叫中心,因此移動服務(wù)系統(tǒng)需要與呼叫中心進(jìn)行雙向的數(shù)據(jù)同步。

  SQL Server CE與SQL Server之間可以通過RDA和Replication(合并復(fù)制)兩種方式進(jìn)行數(shù)據(jù)同步。RDA適用于簡單的、不需要全功能的合并復(fù)制功能(例如數(shù)據(jù)沖突處理)的數(shù)據(jù)同步,而Replication則基于Windows Server 2000的合并復(fù)制功能,可以完成更多更復(fù)雜的功能。

  RDA全稱是Remote data access,其主要由三部分組成:SQL Server CE數(shù)據(jù)庫引擎、SQL Server CE客戶端代理和SQL Server CE服務(wù)器端代理。SQL Server CE數(shù)據(jù)庫引擎負(fù)責(zé)寫入和讀取SQL Server CE數(shù)據(jù)庫中的數(shù)據(jù);SQL Server CE客戶端代理是RDA在移動設(shè)備上的主要組件,它實現(xiàn)了RDA的主要功能,我們可以通過程序調(diào)用它提供的接口以控制RDA;SQL Server CE服務(wù)器端代理位于服務(wù)器端,它與SQL Server CE客戶端代理通過HTTP協(xié)議進(jìn)行通信,接收并處理SQL Server CE客戶端代理的命令。

  RDA支持三個主要的方法,他們分別是:

  • Pull
    將SQL Server 2000數(shù)據(jù)庫中的表“拉”到SQL Server CE中。在調(diào)用此方法時,可以設(shè)置數(shù)據(jù)跟蹤選項,如果設(shè)置數(shù)據(jù)跟蹤,則SQL Server CE數(shù)據(jù)庫引擎會自動跟蹤對數(shù)據(jù)的插入、修改和刪除操作。
  • Push
    如果在Pull時設(shè)置了數(shù)據(jù)跟蹤選項,可以將SQL Server CE中的數(shù)據(jù)“推”回到SQL Server 2000中。在SQL Server CE中對數(shù)據(jù)的任何修改都會反映到SQL Server 2000中。
  • SubmitSQL
    直接向SQL Server 2000數(shù)據(jù)庫提交一個命令。


圖1 SQL Server CE與SQL Server數(shù)據(jù)同步示意圖

  合并復(fù)制是RDA的一種替代方案,只能與SQL Server 2000配合使用。合并復(fù)制的工作組成與RDA基本類似,但是在服務(wù)器端多了一個SQL Server CE復(fù)制提供程序,也就是說SQL Server CE服務(wù)器端代理通過調(diào)用SQL Server CE復(fù)制提供程序,從SQL Server數(shù)據(jù)庫中選取一個“快照”返回給SQL Server CE客戶端代理,客戶端代理在設(shè)備上建立SQL Server CE的數(shù)據(jù)庫(訂閱數(shù)據(jù)庫)。對訂閱數(shù)據(jù)庫的任何修改都會被SQL Server CE數(shù)據(jù)庫引擎記錄下來,在調(diào)用同步方法時,可以把這些修改作用到后臺SQL Server數(shù)據(jù)庫中。

  移動服務(wù)系統(tǒng)在下載維修單時,要滿足兩個基本的條件:一是用戶只能下載分配給自己的維修單;二是只能下載尚沒有完成的維修單。在上傳維修記錄單時,也要滿足兩個基本條件:一是只能上傳客戶已經(jīng)簽名確認(rèn)的維修記錄單;二是只能上傳維修服務(wù)人員選定的維修記錄單。由此可見,移動服務(wù)系統(tǒng)在數(shù)據(jù)同步時,需要實現(xiàn)一定的義務(wù)邏輯規(guī)則,如果用RDA或合并復(fù)制實現(xiàn)這些業(yè)務(wù)邏輯規(guī)則,會比較麻煩一些,所以我們設(shè)計如下的數(shù)據(jù)同步規(guī)則:

  • 數(shù)據(jù)同步包括兩個部分:移動端和服務(wù)器端
  • 服務(wù)器端采用IIS+ASP.NET構(gòu)建應(yīng)用服務(wù)器
  • 移動端與服務(wù)器端采用HTTP協(xié)議傳輸數(shù)據(jù)
  • 移動端采用類似http://host/do.aspx?action=GetJobList&user=&date=的URL訪問服務(wù)器端
  • 服務(wù)器端返回數(shù)據(jù)時,以SUCCESS表示成功,F(xiàn)AILED表示失敗,記錄之間以“^”為分隔符,字段之間以“|”為分隔符
  • 移動端解析服務(wù)器端返回數(shù)據(jù),如果需要的話更新SQL Server CE數(shù)據(jù)庫

開發(fā)準(zhǔn)備工作

準(zhǔn)備開發(fā)環(huán)境

  移動服務(wù)系統(tǒng)采用Visual Studio .NET開發(fā),如果要開發(fā)基于SQL Server CE的應(yīng)用,只需要在項目中添加System.Data.SqlServerCe的引用,在運行和部署時系統(tǒng)會自動安裝兩個SQL Server CE的安裝包文件,他們是sqlce.dev.wce4.armv4.CAB和sqlce.wce4.armv4.CAB(armv4這一項會根據(jù)不同的平臺而有所不同)。sqlce.dev.wce4.armv4.CAB包括Isqlw20.exe和兩個錯誤字符串文件Ssceerror20en.dll和Msdaeren.dll,他們將被安裝到移動設(shè)備的\Program Files\SQLCE 2.0目錄;sqlce.wce4.armv4.CAB包括將被安裝到\Program Files\SQLCE 2.0目錄下的Ssce20.dll、Ssceca20.dll和安裝到\windows目錄下的Sscemw20.dll。

  isqlw20.exe是SQL Server CE的查詢分析器程序,是SQL Server CE在移動設(shè)備上的主要管理工具。


圖2 SQL Server CE查詢分析器

  通過查詢分析器,我們可以建立新的SQL Server CE數(shù)據(jù)庫,打開和關(guān)閉數(shù)據(jù)庫,在數(shù)據(jù)庫中建立、刪除和維護(hù)數(shù)據(jù)表,維護(hù)索引信息,可以輸入SQL語句并查看執(zhí)行結(jié)果。

準(zhǔn)備SQL Server CE數(shù)據(jù)庫

  在開發(fā)中使用的SQL Server CE數(shù)據(jù)庫,可以通過三種方式建立:

  • 通過isqlw20.exe查詢分析器程序建立
  • 通過編寫程序建立數(shù)據(jù)庫,建立表,插入必要的數(shù)據(jù)
  • 通過RDA或合并復(fù)制建立

  其中,通過RDA方式建立是最容易的方法,因為我們可以先行在SQL Server 2000中建立數(shù)據(jù)庫,設(shè)計表結(jié)構(gòu),插入必要的數(shù)據(jù),然后通過RDA一次性的把SQL Server 2000中的表和數(shù)據(jù)下載到移動設(shè)備上。

  1) 安裝SQL Server CE

  首先安裝SQL Server 2000,安裝完成后,還需要安裝SP3a或者最新的SP4補(bǔ)丁。如果希望通過RDA或合并復(fù)制與SQL Server 2000進(jìn)行數(shù)據(jù)同步,那么還必須下載SQL Server CE的補(bǔ)丁。SQL Server CE的補(bǔ)丁應(yīng)該與SQL Server 2000的補(bǔ)丁是一致的,如果SQL Server 2000的補(bǔ)丁是SP3a,那么需要下載SQL Server CE的SP3a的補(bǔ)丁。 SQL Server CE安裝包、SQL Server CE的SP3a補(bǔ)丁及SQL Server CE的SP4補(bǔ)丁均可在微軟的網(wǎng)站(http://www.microsoft.com/downloads/)下載。

  下載完成后,首先安裝SQL Server CE的安裝程序,然后再安裝SQL Server CE的補(bǔ)丁程序。

  2) 配置RDA

  因為RDA使用HTTP協(xié)議實現(xiàn)數(shù)據(jù)通信,所以服務(wù)器端首先需要安裝并配置好IIS服務(wù)。在“開始”菜單中運行“Configure Connectivity Support in IIS”啟動SQL Server CE連接配置程序。


圖3 啟動SQL Server CE連接配置

  出現(xiàn)“SQL Server CE Connectivity Management”界面,雙擊“Create a Virtual Directory”打開配置向?qū)?。在圖4的窗口中輸入虛擬目錄的別名。


圖4 SQL Server CE連接管理配置向?qū)?/P>

  在圖5的界面中選擇必要的安全設(shè)置,可以按照業(yè)務(wù)的實際需求情況選擇,如果不需要額外安全設(shè)置,可以選擇允許匿名訪問。


圖5 安全設(shè)置配置

  設(shè)置完成后,打開瀏覽器,輸入:

http://localhost/sqlce/sscesa20.dll

  如果以上設(shè)置正確,應(yīng)該可以出現(xiàn)圖6所示的文字:


圖6 設(shè)置完畢瀏覽器效果圖

  3) 下載數(shù)據(jù)庫

  使用isqlw20.exe查詢分析器程序建立一個空的數(shù)據(jù)庫:MobileService.sdf。

  建立空數(shù)據(jù)庫也可以使用下面的代碼建立:

if (File.Exists ("\\MobileService.sdf") )
    File.Delete ("\\MobileService.sdf");
SqlCeEngine engine = new SqlCeEngine ("Data Source = \\ MobileService;password=test;encrypt database=TRUE");
engine.CreateDatabase ();
engine.Dispose();

  首先判斷\MobileService.sdf文件是否已經(jīng)存在,如果已經(jīng)存在,則先刪除該文件。在創(chuàng)建數(shù)據(jù)庫時,用的是SqlCeEngine類的CreateDatabase方法,CreateDatabase會根據(jù)LocalConnectionString屬性表示的連接字符串創(chuàng)建SQL Server CE數(shù)據(jù)庫。在連接字符串中的password和encrypt database 屬性是可選項,但是如果使用了encrypt database 屬性則必須包含password屬性。SqlCeEngine類還有一個很重要的方法是Compact,Compact方法用于回收SQL Server CE數(shù)據(jù)庫中浪費的空間,可用于更改SQL Server CE數(shù)據(jù)庫的排列順序、加密方式或密碼。

  在Visual Studio .NET中建立一個簡單的移動應(yīng)用程序,執(zhí)行下面的代碼就可以通過RDA的Pull方法在移動設(shè)備上建立JOB表,并下載SQL Server中JOB表的數(shù)據(jù)。通過更換不同的表名稱,就可以循環(huán)下載SQL Server中所有的表。

string rdaOleDbConnectString = "Provider=sqloledb; Data Source=10.1.11.18;Initial Catalog=test; User Id=sa;Password=sa";
SqlCeRemoteDataAccess rda = null;
rda = new SqlCeRemoteDataAccess();
rda.InternetLogin = "MyLogin";
rda.InternetPassword = "<password>";
rda.InternetUrl = "http://10.1.11.18/sqlce/sscesa20.dll";
rda.LocalConnectionString = @"Provider=Microsoft.SQLSERVER.OLEDB.CE.2.0;Data Source=\MobileService.sdf";
rda.Pull(
    "JOB",
    "Select * from JOB",
    rdaOleDbConnectString);

  在使用SqlCeRemoteDataAccess訪問RDA時,需要指定三個重要的參數(shù):

  • SQL Server CE服務(wù)器端代理的訪問地址,通過SqlCeRemoteDataAccess類的InternetUrl屬性指定;
  • 連接到SQL Server CE數(shù)據(jù)庫的連接字符串,通過SqlCeRemoteDataAccess類的LocalConnectionString 屬性指定;
  • SQL Server CE服務(wù)器端代理訪問SQL數(shù)據(jù)庫的連接字符串,通過調(diào)用Pull、Push或Submit方法時指定

  另外,如果在服務(wù)器端設(shè)置時需要用戶登錄,還需要設(shè)置InternetLogin屬性和InternetPassword屬性;如果通過代理訪問服務(wù)器,還需要指定相關(guān)的代理屬性。

  Pull方法中的第一個參數(shù)是指定的本地表名稱,如果該名稱的表已經(jīng)在SQL Server CE數(shù)據(jù)庫中存在,則該方法會出錯;第四個參數(shù)是設(shè)置是否打開數(shù)據(jù)跟蹤選項的,如果設(shè)置為不打開跟蹤選項,則第二個參數(shù)指定的SQL語句可以從多個表中提取數(shù)據(jù),否則只能從單個表中提取數(shù)據(jù)。因為我們只是要下載數(shù)據(jù),并不打算采用Push方法上傳數(shù)據(jù),所以在此我們可以不指定第四個參數(shù)。

  Push方法把SQL Server CE表中的更改傳送回SQL Server表,應(yīng)用程序必須已經(jīng)通過調(diào)用Pull方法并將RdaTrackOption設(shè)置為TrackingOn或TrackingOnWithIndexes創(chuàng)建了SQL Server CE的數(shù)據(jù)表。

  SubmitSQL提交在遠(yuǎn)程SQL Server的數(shù)據(jù)庫上執(zhí)行的SQL語句。它所提交的SQL語句必須是不返回任何數(shù)據(jù)行的SQL語句。

開發(fā)移動服務(wù)應(yīng)用程序

下載維修單數(shù)據(jù)

  下載維修單需要兩個參數(shù):當(dāng)前的用戶名和最后一個維修單的時間。先通過查詢數(shù)據(jù)庫得到最后一個維修單的時間。

SqlCeConnection conn = null;
try
{
    conn = new SqlCeConnection ("Data Source = \\MobileService.sdf;password=test;encrypt database=TRUE");
    conn.Open();
    //查詢當(dāng)前job中最后一個job的時間
    SqlCeCommand cmd = conn.CreateCommand();
    cmd.CommandText = "select max(jobtime) from job";
    SqlCeDataReader dtr = cmd.ExecuteReader(CommandBehavior.SingleResult);
    string latestdate = "";
    while (dtr.Read())
    {
        if(dtr.IsDBNull(0))
        {
            latestdate = "2005-04-15 0:0:0";
        }
        else
        {
            latestdate = dtr.GetDateTime(0).ToString();
        }
    }
    dtr.Close();
}
catch(SqlCeException ex)
{
    MessageBox.Show(ex.Message);
}
finally
{
    if(conn.State == ConnectionState.Open)
        conn.Close();
}

  使用SqlCeConnection類Open方法打開SQL Server CE數(shù)據(jù)庫的一個連接。一個SQL Server CE數(shù)據(jù)庫僅能打開一個唯一的連接,所以在使用時要注意試圖打開多個到數(shù)據(jù)庫的連接是不會成功的。但是,多個SQL Server CE的命令可以共享同一個打開的連接。使用Open方法打開的連接不會自動關(guān)閉,所以必須顯式關(guān)閉該連接。

  然后使用SqlCeCommand類的ExecuteReader方法執(zhí)行了一條SELECT語句,并將執(zhí)行結(jié)果保存到SqlCeDataReader類中,然后用Read方法讀取該記錄。SELECT語句用到了SQL Server CE的內(nèi)置函數(shù)max,可以得到最大的一個日期。

  在使用Read方法讀取記錄時,先使用IsDBNull方法判斷是否為空,如果job表中原本就沒有記錄的話,使用max函數(shù)得到的結(jié)果為空。如果不為空的話,再調(diào)用GetDateTime方法得到結(jié)果集中的DateTime格式的值。

//下載維修單
string url ="http://10.1.11.18/MSWEB/Do.aspx?action=GetJobList&user=123&date="+latestdate;
HttpWebRequest req = (HttpWebRequest) WebRequest.Create(url);
HttpWebResponse result = (HttpWebResponse) req.GetResponse();
Stream ReceiveStream = result.GetResponseStream();
Encoding encode = System.Text.Encoding.GetEncoding("GB2312");
StreamReader sr = new StreamReader(ReceiveStream,encode);
string resultstring = sr.ReadToEnd();
ReceiveStream.Close();
sr.Close();

  首先用用戶名和最后的維修單時間構(gòu)造一個URL,然后通過HttpWebRequest類的Create方法打開這個URL,通過HttpWebResponse接收返回的數(shù)據(jù),使用Stream讀取返回流中的數(shù)據(jù)。最后的結(jié)果保存在resultstring變量中。

  按照設(shè)計的數(shù)據(jù)同步規(guī)則解析保存在resultstring變量中的記錄和字段(代碼略),然后把記錄寫入SQL Server CE數(shù)據(jù)庫。

//寫入數(shù)據(jù)庫
cmd.CommandText = "INSERT INTO JOB(id,jobname,jobdesc,jobtime,useraddress,userphone)"
    +"VALUES (<各字段數(shù)據(jù)>)";
cmd.ExecuteNonQuery();

  使用SqlCeCommand類的ExecuteNonQuery方法執(zhí)行不需要返回行記錄的SQL語句。

顯示維修單列表

  在.NET Compact Framework中仍然支持?jǐn)?shù)據(jù)綁定控件,因此我們在實現(xiàn)維修單列表時,采用DataGrid數(shù)據(jù)綁定列表控件。在窗口中創(chuàng)建DataGrid控件,命名為dataGridJobList,然后在屬性窗口中單擊TableStyles項的“…”圖標(biāo),將出現(xiàn)TableStyles集合編輯器,如圖7所示:


圖7 TableStyles集合編輯器

  在MappingName中輸入“JOBLIST”,點擊GridColumSytles旁邊的“...”按鈕,設(shè)定數(shù)據(jù)綁定的列映射。在設(shè)定列映射時,添加三列,映射名稱分別是id,jobname,jobtime。如圖8所示:


圖8 列映射效果圖

  在Form_load事件中添加數(shù)據(jù)綁定的代碼:

//數(shù)據(jù)綁定
this.dataGridJobList.RowHeadersVisible = false;
dataGridJobList.Font = new Font("宋體",9F,FontStyle.Regular );
System.Data.DataSet dsJobList;
System.Data.DataTable dtJobList;
dsJobList = new DataSet();
sql = "select id,jobname,jobtime from job order by jobtime desc";
SqlCeDataAdapter adapter = new SqlCeDataAdapter(sql, conn);
adapter.Fill(dsJobList, "JOBLIST");
dtJobList = dsJobList.Tables["JOBLIST"];
this.dataGridJobList.DataSource = dtJobList;

  通過SqlCeDataAdapter的Fill方法把SQL語句的執(zhí)行結(jié)果填充到DataSet中,取出DataSet中名為“JOBLIST”的DataTable,把DataGrid控件的數(shù)據(jù)源屬性DataSource設(shè)定為名稱為“JOBLIST”的DataTable。通過上述操作就可以完成SQL Server CE數(shù)據(jù)與一個DataGrid控件的數(shù)據(jù)綁定。

編輯并保存維修記錄單

  當(dāng)點擊列表中的維修單時,將彈出維修記錄編輯界面。在DataGrid的MouseUP事件中添加下列代碼將可以獲取當(dāng)前點擊的是哪一個維修單,并打開維修記錄編輯界面。

DataGrid myGrid = (DataGrid)sender;
DataGrid.HitTestInfo myHitInfo = myGrid.HitTest(e.X,e.Y);
if (myHitInfo.Type == DataGrid.HitTestType.Cell && myHitInfo.Column == 1)
{
    Cursor.Current = Cursors.WaitCursor;
    DataGridCell myCell = dataGridJobList.CurrentCell;
    string jobid = dtJobList.Rows[myCell.RowNumber][0].ToString();
    Cursor.Current = Cursors.Default;
    FrmJob frmJob = new FrmJob(jobid);
    frmJob.ShowDialog();
}

  在FrmJob的Load事件中添加根據(jù)jobid查詢維修單詳細(xì)信息的代碼,并將查詢結(jié)果顯示在界面上。

string sql ="select jobname,jobdesc,jobtime,userphone,useraddress,jobdonedesc from job where id="+jobid;
SqlCeCommand cmdDML = new SqlCeCommand(sql,conn);
cmdDML.CommandType = CommandType.Text;
SqlCeDataReader dtr = cmdDML.ExecuteReader(CommandBehavior.SingleResult);
while (dtr.Read())
{
    this.lblJobName.Text = dtr.GetString(0);
    this.lblJobDesc.Text = dtr.GetString(1);
    this.lblJobTime.Text = dtr.GetDateTime(2).ToString();
    this.lblPhone.Text = dtr.GetString(3);
    this.lblAddress.Text = dtr.GetString(4);
    if(!dtr.IsDBNull(5))
        this.txtDoneDesc.Text = dtr.GetString(5);
}
dtr.Close();

  編輯完成后,使用SqlCeCommand類的ExecuteNonQuery方法執(zhí)行UPDATE語句更新維修記錄單。

上傳維修記錄單

  上傳維修記錄單時采用的方法與下載基本相同,需要在后臺服務(wù)器添加一個新的上傳接口。需要注意的是,因為HTTP的GET協(xié)議的URL長度通常是有限制的,所以如果需要上傳的內(nèi)容比較多時,需要考慮用POST協(xié)議。

結(jié)束語

  本文結(jié)合移動服務(wù)系統(tǒng)的開發(fā)過程介紹了SQL Server CE的特點以及安裝、開發(fā)SQL Server CE應(yīng)用程序的方法,如果需要更全面和詳盡的了解SQL Server CE,可以參閱SQL Server CE附帶的“Books Onlie”。

  通過本文的介紹,大家可以看到利用ADO.NET開發(fā)SQL Server CE的應(yīng)用程序,在開發(fā)方法上與在PC平臺上使用ADO.NET非常類似,但總的說來還是要注意一下幾點:

  1. SQL Server CE是用于移動設(shè)備上的一個很輕量級的數(shù)據(jù)庫系統(tǒng),其性能受移動設(shè)備的存儲能力和計算能力的制約,因此在使用SQL Server CE時,盡量避免大數(shù)據(jù)量的操作,要盡可能的壓縮SQL Server CE上數(shù)據(jù)的規(guī)模。
  2. SQL Server CE有一些比較特殊的地方需要注意,例如只能打開一個到SQL Server CE的連接,支持?jǐn)?shù)據(jù)庫口令和加密,支持部分函數(shù)等。
  3. 在使用RDA或合并復(fù)制時,要結(jié)合自己的數(shù)據(jù)同步業(yè)務(wù)邏輯靈活運用,避免生搬硬套帶來更多的不方便。
  4. 注意使用SqlCeEngine類的Compact方法回收 SQL Server CE 數(shù)據(jù)庫中浪費的空間。如果發(fā)現(xiàn)數(shù)據(jù)庫文件已經(jīng)達(dá)到幾兆甚至將近十兆左右時,可以用Compact方法嘗試壓縮一下數(shù)據(jù)庫。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多