整理几段操作 sql server mobile 数据库的常用 c# 代码,供刚刚接触 sql server mobile 开发的朋友参考。
1. 创建数据库
// 创建数据库
file.delete("test.sdf");
sqlceengine engine = new sqlceengine(
"data source='test.sdf';lcid=1033;password=/"s$;2'!ds64/";encrypt=true;");
engine.createdatabase();
2. 验证和修复数据库
// 验证和修复数据库
sqlceengine engine = new sqlceengine("data source=adventureworks.sdf");
if (false == engine.verify())
{
messagebox.show("database is corrupted.");
engine.repair(null, repairoption.recovercorruptedrows);
}
3. 压缩数据库
// 压缩数据库
// 通过从现有文件新建数据库文件来回收 sql server mobile 数据库中浪费的空间。
// 此方法还可用来更改数据库的排序顺序、加密或密码设置。
// 该连接字符串指定一个指向将由此方法创建的目标数据库的连接。
// 如果指定的数据库已经存在或者具有相同名称的另一文件已经存在,则会引发异常。
// 如果为连接字符串传递空字符串,则新的数据库文件将改写旧的数据库文件,
// 但名称保持不变。
sqlceengine engine = new sqlceengine("data source=adventureworks.sdf");
//engine.compact(null);
engine.compact("data source=; [email protected]!7f$dq;");
4. 收缩数据库
// 收缩数据库
// 通过将空页移动到文件的结尾然后截断该文件,
// 来回收 sql server mobile 数据库中浪费的空间。
// 与 compact 方法不同,shrink 方法不创建临时数据库文件,
// 而是将所有空页和未分配的页都移到了文件的结尾,然后截断,从而减小数据库的总大小。
sqlceengine engine = new sqlceengine("data source=adventureworks.sdf");
engine.shrink();
5. 合并复制
// 合并复制
// 实例化并配置 sqlcereplication 对象
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";
// 创建一个本地 sql server mobile 数据库的订阅
repl.addsubscription(addoption.createdatabase);
// 跟 sql server 数据库进行同步
repl.synchronize();
// 清理 repl 对象
repl.dispose();
6. 远程数据访问(rda)
// 远程数据访问
// 实例化并配置 sqlceremotedataaccess 对象
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 下载数据
rda.pull(
"employees",
"select * from dimemployee",
"provider=sqloledb;server=mysqlserver;database=adventureworks;uid=sa;pwd=;",
rdatrackoption.trackingonwithindexes,
"errortable");
//
// 修改本地数据
//
// 将已修改的数据上传到 sql server
rda.push(
"dimemployee",
"provider=sqloledb;server=mysqlserver;database=adventureworks;uid=sa;pwd=;");
// 提交 sql 语句在 sql server 上执行
rda.submitsql(
"create table myremotetable (cola int)",
"provider=sqloledb;server=mysqlserver;database=adventureworks;uid=sa;pwd=;");
7. 使用 sqlceresultset
// 使用 sqlceresultset
// 创建 sql server mobile 数据库连接
sqlceconnection conn = new sqlceconnection("data source=northwind.sdf");
// 创建并配置 sqlcecommand 对象
sqlcecommand cmd = conn.createcommand();
cmd.commandtext = "select * from orders";
// 创建 sqlceresultset 对象,并配置为可滚动、可更新、检测数据源更改
resultsetoptions options = resultsetoptions.scrollable |
resultsetoptions.sensitive |
resultsetoptions.updatable;
sqlceresultset resultset = cmd.executeresultset(options);
// 创建 resultsetview 对象,配置为只显示序号为 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)
{
// 标识错误类型的 hresult 值,这些错误不是 sql server ce 固有的
bld.append("/r/nerror code: ").append(err.hresult.tostring("x"));
// 对错误进行描述的文本
bld.append("/r/nmessage: ").append(err.message);
// 获取 sqlceerror 的本机错误号
bld.append("/r/nminor err.: ").append(err.nativeerror);
// 生成错误的提供程序的名称
bld.append("/r/nsource: ").append(err.source);
// 遍历前三个错误参数。sql server ce 使用错误参数来提供有关错误的其他详细信息。
foreach (int numpara in err.numericerrorparameters)
{
// 虽然错误可能存在参数,但并非发生的所有错误都返回参数。
// 如果发生某个错误时没有返回任何参数,则该数组的值为 0。
if (numpara != 0)
{
bld.append("/r/nnum. par.: ").append(numpara);
}
}
// 遍历最后三个错误参数。sql server ce 使用错误参数来提供有关错误的其他详细信息。
foreach (string errpara in err.errorparameters)
{
// 虽然错误可能存在参数,但并非发生的所有错误都返回参数。
// 如果发生某个错误时没有返回任何参数,则该数组的值将为空字符串。
if (errpara != string.empty)
{
bld.append("/r/nerr. par.: ").append(errpara);
}
}
}
messagebox.show(bld.tostring());
}
参考:
sql server mobile 2005 联机丛书
msdn library
新闻热点
疑难解答