整理幾段操作 sql server mobile 數(shù)據(jù)庫(kù)的常用 c# 代碼,供剛剛接觸 sql server mobile 開(kāi)發(fā)的朋友參考。
1. 創(chuàng)建數(shù)據(jù)庫(kù)
// 創(chuàng)建數(shù)據(jù)庫(kù)
file.delete("test.sdf");
sqlceengine engine = new sqlceengine(
"data source='test.sdf';lcid=1033;password=/"s$;2'!ds64/";encrypt=true;");
engine.createdatabase();
2. 驗(yàn)證和修復(fù)數(shù)據(jù)庫(kù)
// 驗(yàn)證和修復(fù)數(shù)據(jù)庫(kù)
sqlceengine engine = new sqlceengine("data source=adventureworks.sdf");
if (false == engine.verify())
{
messagebox.show("database is corrupted.");
engine.repair(null, repairoption.recovercorruptedrows);
}
3. 壓縮數(shù)據(jù)庫(kù)
// 壓縮數(shù)據(jù)庫(kù)
// 通過(guò)從現(xiàn)有文件新建數(shù)據(jù)庫(kù)文件來(lái)回收 sql server mobile 數(shù)據(jù)庫(kù)中浪費(fèi)的空間。
// 此方法還可用來(lái)更改數(shù)據(jù)庫(kù)的排序順序、加密或密碼設(shè)置。
// 該連接字符串指定一個(gè)指向?qū)⒂纱朔椒▌?chuàng)建的目標(biāo)數(shù)據(jù)庫(kù)的連接。
// 如果指定的數(shù)據(jù)庫(kù)已經(jīng)存在或者具有相同名稱的另一文件已經(jīng)存在,則會(huì)引發(fā)異常。
// 如果為連接字符串傳遞空字符串,則新的數(shù)據(jù)庫(kù)文件將改寫(xiě)舊的數(shù)據(jù)庫(kù)文件,
// 但名稱保持不變。
sqlceengine engine = new sqlceengine("data source=adventureworks.sdf");
//engine.compact(null);
engine.compact("data source=; [email protected]!7f$dq;");
4. 收縮數(shù)據(jù)庫(kù)
// 收縮數(shù)據(jù)庫(kù)
// 通過(guò)將空頁(yè)移動(dòng)到文件的結(jié)尾然后截?cái)嘣撐募?br>// 來(lái)回收 sql server mobile 數(shù)據(jù)庫(kù)中浪費(fèi)的空間。
// 與 compact 方法不同,shrink 方法不創(chuàng)建臨時(shí)數(shù)據(jù)庫(kù)文件,
// 而是將所有空頁(yè)和未分配的頁(yè)都移到了文件的結(jié)尾,然后截?cái)啵瑥亩鴾p小數(shù)據(jù)庫(kù)的總大小。
sqlceengine engine = new sqlceengine("data source=adventureworks.sdf");
engine.shrink();
5. 合并復(fù)制
// 合并復(fù)制
// 實(shí)例化并配置 sqlcereplication 對(duì)象
sqlcereplication repl = new sqlcereplication();
repl.interneturl = "http://www.adventure-works.com/sqlmobile/sqlcesa30.dll";
repl.internetlogin = "myinternetlogin";
repl.internetpassword = "<password>";
repl.publisher = "mypublisher";
repl.publisherdatabase = "mypublisherdatabase";
repl.publisherlogin = "mypublisherlogin";
repl.publisherpassword = "<password>";
repl.publication = "mypublication";
repl.subscriber = "mysubscriber";
repl.subscriberconnectionstring = "data source=mydatabase.sdf";
// 創(chuàng)建一個(gè)本地 sql server mobile 數(shù)據(jù)庫(kù)的訂閱
repl.addsubscription(addoption.createdatabase);
// 跟 sql server 數(shù)據(jù)庫(kù)進(jìn)行同步
repl.synchronize();
// 清理 repl 對(duì)象
repl.dispose();
6. 遠(yuǎn)程數(shù)據(jù)訪問(wèn)(rda)
// 遠(yuǎn)程數(shù)據(jù)訪問(wèn)
// 實(shí)例化并配置 sqlceremotedataaccess 對(duì)象
sqlceremotedataaccess rda = new sqlceremotedataaccess();
rda.interneturl = "http://www.adventure-works.com/sqlmobile/sqlcesa30.dll";
rda.internetlogin = "myinternetlogin";
rda.internetpassword = "<password>";
rda.localconnectionstring = "data source=mydatabase.sdf";
// 從 sql server 下載數(shù)據(jù)
rda.pull(
"employees",
"select * from dimemployee",
"provider=sqloledb;server=mysqlserver;database=adventureworks;uid=sa;pwd=;",
rdatrackoption.trackingonwithindexes,
"errortable");
//
// 修改本地?cái)?shù)據(jù)
//
// 將已修改的數(shù)據(jù)上傳到 sql server
rda.push(
"dimemployee",
"provider=sqloledb;server=mysqlserver;database=adventureworks;uid=sa;pwd=;");
// 提交 sql 語(yǔ)句在 sql server 上執(zhí)行
rda.submitsql(
"create table myremotetable (cola int)",
"provider=sqloledb;server=mysqlserver;database=adventureworks;uid=sa;pwd=;");
7. 使用 sqlceresultset
// 使用 sqlceresultset
// 創(chuàng)建 sql server mobile 數(shù)據(jù)庫(kù)連接
sqlceconnection conn = new sqlceconnection("data source=northwind.sdf");
// 創(chuàng)建并配置 sqlcecommand 對(duì)象
sqlcecommand cmd = conn.createcommand();
cmd.commandtext = "select * from orders";
// 創(chuàng)建 sqlceresultset 對(duì)象,并配置為可滾動(dòng)、可更新、檢測(cè)數(shù)據(jù)源更改
resultsetoptions options = resultsetoptions.scrollable |
resultsetoptions.sensitive |
resultsetoptions.updatable;
sqlceresultset resultset = cmd.executeresultset(options);
// 創(chuàng)建 resultsetview 對(duì)象,配置為只顯示序號(hào)為 1,3,5,8 的列
resultsetview resultsetview = resultset.resultsetview;
int[] ordinals = new int[] { 1,3,5,8};
resultsetview.ordinals = ordinals;
// 將 resultsetview 綁定到 datagrid 控件
this.datagrid.datasource = resultsetview;
8. 處理 sqlceexception
// 處理 sqlceexception
public static void showerrors(sqlceexception e)
{
sqlceerrorcollection errorcollection = e.errors;
stringbuilder bld = new stringbuilder();
exception inner = e.innerexception;
foreach (sqlceerror err in errs)
{
// 標(biāo)識(shí)錯(cuò)誤類型的 hresult 值,這些錯(cuò)誤不是 sql server ce 固有的
bld.append("/r/nerror code: ").append(err.hresult.tostring("x"));
// 對(duì)錯(cuò)誤進(jìn)行描述的文本
bld.append("/r/nmessage: ").append(err.message);
// 獲取 sqlceerror 的本機(jī)錯(cuò)誤號(hào)
bld.append("/r/nminor err.: ").append(err.nativeerror);
// 生成錯(cuò)誤的提供程序的名稱
bld.append("/r/nsource: ").append(err.source);
// 遍歷前三個(gè)錯(cuò)誤參數(shù)。sql server ce 使用錯(cuò)誤參數(shù)來(lái)提供有關(guān)錯(cuò)誤的其他詳細(xì)信息。
foreach (int numpara in err.numericerrorparameters)
{
// 雖然錯(cuò)誤可能存在參數(shù),但并非發(fā)生的所有錯(cuò)誤都返回參數(shù)。
// 如果發(fā)生某個(gè)錯(cuò)誤時(shí)沒(méi)有返回任何參數(shù),則該數(shù)組的值為 0。
if (numpara != 0)
{
bld.append("/r/nnum. par.: ").append(numpara);
}
}
// 遍歷最后三個(gè)錯(cuò)誤參數(shù)。sql server ce 使用錯(cuò)誤參數(shù)來(lái)提供有關(guān)錯(cuò)誤的其他詳細(xì)信息。
foreach (string errpara in err.errorparameters)
{
// 雖然錯(cuò)誤可能存在參數(shù),但并非發(fā)生的所有錯(cuò)誤都返回參數(shù)。
// 如果發(fā)生某個(gè)錯(cuò)誤時(shí)沒(méi)有返回任何參數(shù),則該數(shù)組的值將為空字符串。
if (errpara != string.empty)
{
bld.append("/r/nerr. par.: ").append(errpara);
}
}
}
messagebox.show(bld.tostring());
}
參考:
sql server mobile 2005 聯(lián)機(jī)叢書(shū)
msdn library
新聞熱點(diǎn)
疑難解答
圖片精選