操作 SQL Server Mobile 2005 数据库的常用 C# 代码
1
整理几段操作 SQL Server Mobile 数据库的常用 C# 代码,供刚刚接触 SQL Server Mobile 开发的朋友参考。
2
3
1. 创建数据库
4
// 创建数据库
5
File.Delete("Test.sdf");
6
SqlCeEngine engine = new SqlCeEngine(
7
"Data Source='Test.sdf';LCID=1033;Password=\"s$;2'!dS64\";Encrypt=TRUE;");
8
engine.CreateDatabase();
9
10
2. 验证和修复数据库
11
// 验证和修复数据库
12
SqlCeEngine engine = new SqlCeEngine("Data Source=AdventureWorks.sdf");
13
if (false == engine.Verify())
14
{
15
MessageBox.Show("Database is corrupted.");
16
engine.Repair(null, RepairOption.RecoverCorruptedRows);
17
}
18
19
3. 压缩数据库
20
// 压缩数据库
21
// 通过从现有文件新建数据库文件来回收 SQL Server Mobile 数据库中浪费的空间。
22
// 此方法还可用来更改数据库的排序顺序、加密或密码设置。
23
// 该连接字符串指定一个指向将由此方法创建的目标数据库的连接。
24
// 如果指定的数据库已经存在或者具有相同名称的另一文件已经存在,则会引发异常。
25
// 如果为连接字符串传递空字符串,则新的数据库文件将改写旧的数据库文件,
26
// 但名称保持不变。
27
SqlCeEngine engine = new SqlCeEngine("Data Source=AdventureWorks.sdf");
28
//engine.Compact(null);
29
engine.Compact("Data Source=; Password=a@3!7f$dQ;");
30
31
32
4. 收缩数据库
33
34
// 收缩数据库
35
// 通过将空页移动到文件的结尾然后截断该文件,
36
// 来回收 SQL Server Mobile 数据库中浪费的空间。
37
// 与 Compact 方法不同,Shrink 方法不创建临时数据库文件,
38
// 而是将所有空页和未分配的页都移到了文件的结尾,然后截断,从而减小数据库的总大小。
39
SqlCeEngine engine = new SqlCeEngine("Data Source=AdventureWorks.sdf");
40
engine.Shrink();
41
42
5. 合并复制
43
// 合并复制
44
// 实例化并配置 SqlCeReplication 对象
45
SqlCeReplication repl = new SqlCeReplication();
46
repl.InternetUrl = "http://www.adventure-works.com/sqlmobile/sqlcesa30.dll";
47
repl.InternetLogin = "MyInternetLogin";
48
repl.InternetPassword = "<password>";
49
repl.Publisher = "MyPublisher";
50
repl.PublisherDatabase = "MyPublisherDatabase";
51
repl.PublisherLogin = "MyPublisherLogin";
52
repl.PublisherPassword = "<password>";
53
repl.Publication = "MyPublication";
54
repl.Subscriber = "MySubscriber";
55
repl.SubscriberConnectionString = "Data Source=MyDatabase.sdf";
56
57
// 创建一个本地 SQL Server Mobile 数据库的订阅
58
repl.AddSubscription(AddOption.CreateDatabase);
59
60
// 跟 SQL Server 数据库进行同步
61
repl.Synchronize();
62
63
// 清理 repl 对象
64
repl.Dispose();
65
66
6. 远程数据访问(RDA)
67
// 远程数据访问
68
// 实例化并配置 SqlCeRemoteDataAccess 对象
69
SqlCeRemoteDataAccess rda = new SqlCeRemoteDataAccess();
70
rda.InternetUrl = "http://www.adventure-works.com/sqlmobile/sqlcesa30.dll";
71
rda.InternetLogin = "MyInternetLogin";
72
rda.InternetPassword = "<password>";
73
rda.LocalConnectionString = "Data Source=MyDatabase.sdf";
74
75
// 从 SQL Server 下载数据
76
rda.Pull(
77
"Employees",
78
"SELECT * FROM DimEmployee",
79
"Provider=sqloledb;server=MySqlServer;database=AdventureWorks;uid=sa;pwd=;",
80
RdaTrackOption.TrackingOnWithIndexes,
81
"ErrorTable");
82
83
//
84
// 修改本地数据
85
//
86
87
// 将已修改的数据上传到 SQL Server
88
rda.Push(
89
"DimEmployee",
90
"Provider=sqloledb;server=MySqlServer;database=AdventureWorks;uid=sa;pwd=;");
91
92
// 提交 SQL 语句在 SQL Server 上执行
93
rda.SubmitSql(
94
"CREATE TABLE MyRemoteTable (colA int)",
95
"Provider=sqloledb;server=MySqlServer;database=AdventureWorks;uid=sa;pwd=;");
96
97
7. 使用 SqlCeResultSet
98
// 使用 SqlCeResultSet
99
// 创建 SQL Server Mobile 数据库连接
100
SqlCeConnection conn = new SqlCeConnection("Data Source=Northwind.sdf");
101
102
// 创建并配置 SqlCeCommand 对象
103
SqlCeCommand cmd = conn.CreateCommand();
104
cmd.CommandText = "SELECT * FROM Orders";
105
106
// 创建 SqlCeResultSet 对象,并配置为可滚动、可更新、检测数据源更改
107
ResultSetOptions options = ResultSetOptions.Scrollable |
108
ResultSetOptions.Sensitive |
109
ResultSetOptions.Updatable;
110
SqlCeResultSet resultSet = cmd.ExecuteResultSet(options);
111
112
// 创建 ResultSetView 对象,配置为只显示序号为 1,3,5,8 的列
113
ResultSetView resultSetView = resultSet.ResultSetView;
114
int[] ordinals = new int[] { 1,3,5,8};
115
resultSetView.Ordinals = ordinals;
116
117
// 将 ResultSetView 绑定到 DataGrid 控件
118
this.dataGrid.DataSource = resultSetView;
119
120
8. 处理 SqlCeException
121
// 处理 SqlCeException
122
public static void ShowErrors(SqlCeException e)
123
{
124
SqlCeErrorCollection errorCollection = e.Errors;
125
126
StringBuilder bld = new StringBuilder();
127
Exception inner = e.InnerException;
128
129
foreach (SqlCeError err in errs)
130
{
131
// 标识错误类型的 HRESULT 值,这些错误不是 SQL Server CE 固有的
132
bld.Append("\r\nError Code: ").Append(err.HResult.ToString("X"));
133
// 对错误进行描述的文本
134
bld.Append("\r\nMessage: ").Append(err.Message);
135
// 获取 SqlCeError 的本机错误号
136
bld.Append("\r\nMinor Err.: ").Append(err.NativeError);
137
// 生成错误的提供程序的名称
138
bld.Append("\r\nSource: ").Append(err.Source);
139
140
// 遍历前三个错误参数。SQL Server CE 使用错误参数来提供有关错误的其他详细信息。
141
foreach (int numPara in err.NumericErrorParameters)
142
{
143
// 虽然错误可能存在参数,但并非发生的所有错误都返回参数。
144
// 如果发生某个错误时没有返回任何参数,则该数组的值为 0。
145
if (numPara != 0)
146
{
147
bld.Append("\r\nNum. Par.: ").Append(numPara);
148
}
149
}
150
151
// 遍历最后三个错误参数。SQL Server CE 使用错误参数来提供有关错误的其他详细信息。
152
foreach (string errPara in err.ErrorParameters)
153
{
154
// 虽然错误可能存在参数,但并非发生的所有错误都返回参数。
155
// 如果发生某个错误时没有返回任何参数,则该数组的值将为空字符串。
156
if (errPara != String.Empty)
157
{
158
bld.Append("\r\nErr. Par.: ").Append(errPara);
159
}
160
}
161
}
162
163
MessageBox.Show(bld.ToString());
164
}
165
166
整理几段操作 SQL Server Mobile 数据库的常用 C# 代码,供刚刚接触 SQL Server Mobile 开发的朋友参考。2

3
1. 创建数据库4
// 创建数据库5
File.Delete("Test.sdf");6
SqlCeEngine engine = new SqlCeEngine(7
"Data Source='Test.sdf';LCID=1033;Password=\"s$;2'!dS64\";Encrypt=TRUE;");8
engine.CreateDatabase();9

10
2. 验证和修复数据库11
// 验证和修复数据库12
SqlCeEngine engine = new SqlCeEngine("Data Source=AdventureWorks.sdf");13
if (false == engine.Verify())14
{15
MessageBox.Show("Database is corrupted.");16
engine.Repair(null, RepairOption.RecoverCorruptedRows);17
}18

19
3. 压缩数据库20
// 压缩数据库21
// 通过从现有文件新建数据库文件来回收 SQL Server Mobile 数据库中浪费的空间。22
// 此方法还可用来更改数据库的排序顺序、加密或密码设置。23
// 该连接字符串指定一个指向将由此方法创建的目标数据库的连接。24
// 如果指定的数据库已经存在或者具有相同名称的另一文件已经存在,则会引发异常。25
// 如果为连接字符串传递空字符串,则新的数据库文件将改写旧的数据库文件,26
// 但名称保持不变。27
SqlCeEngine engine = new SqlCeEngine("Data Source=AdventureWorks.sdf");28
//engine.Compact(null);29
engine.Compact("Data Source=; Password=a@3!7f$dQ;");30

31
32
4. 收缩数据库33

34
// 收缩数据库35
// 通过将空页移动到文件的结尾然后截断该文件,36
// 来回收 SQL Server Mobile 数据库中浪费的空间。37
// 与 Compact 方法不同,Shrink 方法不创建临时数据库文件,38
// 而是将所有空页和未分配的页都移到了文件的结尾,然后截断,从而减小数据库的总大小。39
SqlCeEngine engine = new SqlCeEngine("Data Source=AdventureWorks.sdf");40
engine.Shrink();41

42
5. 合并复制43
// 合并复制44
// 实例化并配置 SqlCeReplication 对象45
SqlCeReplication repl = new SqlCeReplication();46
repl.InternetUrl = "http://www.adventure-works.com/sqlmobile/sqlcesa30.dll";47
repl.InternetLogin = "MyInternetLogin";48
repl.InternetPassword = "<password>";49
repl.Publisher = "MyPublisher";50
repl.PublisherDatabase = "MyPublisherDatabase";51
repl.PublisherLogin = "MyPublisherLogin";52
repl.PublisherPassword = "<password>";53
repl.Publication = "MyPublication";54
repl.Subscriber = "MySubscriber";55
repl.SubscriberConnectionString = "Data Source=MyDatabase.sdf";56

57
// 创建一个本地 SQL Server Mobile 数据库的订阅58
repl.AddSubscription(AddOption.CreateDatabase);59

60
// 跟 SQL Server 数据库进行同步61
repl.Synchronize();62

63
// 清理 repl 对象64
repl.Dispose();65

66
6. 远程数据访问(RDA)67
// 远程数据访问68
// 实例化并配置 SqlCeRemoteDataAccess 对象69
SqlCeRemoteDataAccess rda = new SqlCeRemoteDataAccess();70
rda.InternetUrl = "http://www.adventure-works.com/sqlmobile/sqlcesa30.dll";71
rda.InternetLogin = "MyInternetLogin";72
rda.InternetPassword = "<password>";73
rda.LocalConnectionString = "Data Source=MyDatabase.sdf";74

75
// 从 SQL Server 下载数据76
rda.Pull(77
"Employees",78
"SELECT * FROM DimEmployee",79
"Provider=sqloledb;server=MySqlServer;database=AdventureWorks;uid=sa;pwd=;",80
RdaTrackOption.TrackingOnWithIndexes,81
"ErrorTable");82

83
//84
// 修改本地数据85
//86

87
// 将已修改的数据上传到 SQL Server88
rda.Push(89
"DimEmployee", 90
"Provider=sqloledb;server=MySqlServer;database=AdventureWorks;uid=sa;pwd=;");91

92
// 提交 SQL 语句在 SQL Server 上执行93
rda.SubmitSql(94
"CREATE TABLE MyRemoteTable (colA int)", 95
"Provider=sqloledb;server=MySqlServer;database=AdventureWorks;uid=sa;pwd=;");96

97
7. 使用 SqlCeResultSet98
// 使用 SqlCeResultSet99
// 创建 SQL Server Mobile 数据库连接100
SqlCeConnection conn = new SqlCeConnection("Data Source=Northwind.sdf");101

102
// 创建并配置 SqlCeCommand 对象103
SqlCeCommand cmd = conn.CreateCommand();104
cmd.CommandText = "SELECT * FROM Orders";105

106
// 创建 SqlCeResultSet 对象,并配置为可滚动、可更新、检测数据源更改107
ResultSetOptions options = ResultSetOptions.Scrollable | 108
ResultSetOptions.Sensitive | 109
ResultSetOptions.Updatable;110
SqlCeResultSet resultSet = cmd.ExecuteResultSet(options); 111

112
// 创建 ResultSetView 对象,配置为只显示序号为 1,3,5,8 的列113
ResultSetView resultSetView = resultSet.ResultSetView; 114
int[] ordinals = new int[] { 1,3,5,8};115
resultSetView.Ordinals = ordinals;116

117
// 将 ResultSetView 绑定到 DataGrid 控件118
this.dataGrid.DataSource = resultSetView;119

120
8. 处理 SqlCeException121
// 处理 SqlCeException122
public static void ShowErrors(SqlCeException e)123
{124
SqlCeErrorCollection errorCollection = e.Errors;125

126
StringBuilder bld = new StringBuilder();127
Exception inner = e.InnerException;128

129
foreach (SqlCeError err in errs)130
{131
// 标识错误类型的 HRESULT 值,这些错误不是 SQL Server CE 固有的132
bld.Append("\r\nError Code: ").Append(err.HResult.ToString("X"));133
// 对错误进行描述的文本134
bld.Append("\r\nMessage: ").Append(err.Message);135
// 获取 SqlCeError 的本机错误号136
bld.Append("\r\nMinor Err.: ").Append(err.NativeError);137
// 生成错误的提供程序的名称138
bld.Append("\r\nSource: ").Append(err.Source);139

140
// 遍历前三个错误参数。SQL Server CE 使用错误参数来提供有关错误的其他详细信息。141
foreach (int numPara in err.NumericErrorParameters)142
{143
// 虽然错误可能存在参数,但并非发生的所有错误都返回参数。144
// 如果发生某个错误时没有返回任何参数,则该数组的值为 0。145
if (numPara != 0)146
{147
bld.Append("\r\nNum. Par.: ").Append(numPara);148
}149
}150

151
// 遍历最后三个错误参数。SQL Server CE 使用错误参数来提供有关错误的其他详细信息。152
foreach (string errPara in err.ErrorParameters)153
{154
// 虽然错误可能存在参数,但并非发生的所有错误都返回参数。155
// 如果发生某个错误时没有返回任何参数,则该数组的值将为空字符串。156
if (errPara != String.Empty)157
{158
bld.Append("\r\nErr. Par.: ").Append(errPara);159
}160
}161
}162

163
MessageBox.Show(bld.ToString());164
}165

166

参考:
SQL Server Mobile 2005 联机丛书
MSDN Library
http://www.cnblogs.com/upto/archive/2006/08/22/sqlservermobilecode.html


浙公网安备 33010602011771号