📄 form1.cs
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlServerCe;
using System.IO;
namespace SqlMobileManagement
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnCreate_Click(object sender, EventArgs e)
{
Cursor.Current = Cursors.WaitCursor;
try
{
// 创建数据库
File.Delete("Test.sdf");
SqlCeEngine engine = new SqlCeEngine("Data Source='Test.sdf';");
engine.CreateDatabase();
}
catch (SqlCeException ex)
{
ShowErrors(ex);
}
Cursor.Current = Cursors.Default;
}
private void btnRepair_Click(object sender, EventArgs e)
{
Cursor.Current = Cursors.WaitCursor;
try
{
// 验证和修复数据库
SqlCeEngine engine = new SqlCeEngine("Data Source=Test.sdf");
if (false == engine.Verify())
{
MessageBox.Show("Database is corrupted.");
engine.Repair(null, RepairOption.RecoverCorruptedRows);
}
}
catch (SqlCeException ex)
{
ShowErrors(ex);
}
Cursor.Current = Cursors.Default;
}
private void btnCompress_Click(object sender, EventArgs e)
{
Cursor.Current = Cursors.WaitCursor;
try
{
// 压缩数据库
// 通过从现有文件新建数据库文件来回收 SQL Server Mobile 数据库中浪费的空间。
// 此方法还可用来更改数据库的排序顺序、加密或密码设置。
// 该连接字符串指定一个指向将由此方法创建的目标数据库的连接。
// 如果指定的数据库已经存在或者具有相同名称的另一文件已经存在,则会引发异常。
// 如果为连接字符串传递空字符串,则新的数据库文件将改写旧的数据库文件,
// 但名称保持不变。
SqlCeEngine engine = new SqlCeEngine("Data Source=Test.sdf");
//engine.Compact(null);
engine.Compact("Data Source=; Password=1234");
}
catch (SqlCeException ex)
{
ShowErrors(ex);
}
Cursor.Current = Cursors.Default;
}
private void btnShrink_Click(object sender, EventArgs e)
{
Cursor.Current = Cursors.WaitCursor;
try
{
// 收缩数据库
// 通过将空页移动到文件的结尾然后截断该文件,
// 来回收 SQL Server Mobile 数据库中浪费的空间。
// 与 Compact 方法不同,Shrink 方法不创建临时数据库文件,
// 而是将所有空页和未分配的页都移到了文件的结尾,然后截断,从而减小数据库的总大小。
SqlCeEngine engine = new SqlCeEngine("Data Source=Test.sdf; Password=1234");
engine.Shrink();
}
catch (SqlCeException ex)
{
ShowErrors(ex);
}
Cursor.Current = Cursors.Default;
}
private void menuItem1_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void btnException_Click(object sender, EventArgs e)
{
try
{
SqlCeEngine engine = new SqlCeEngine("Data Source=Test.sdf");
engine.CreateDatabase();
}
catch (SqlCeException ex)
{
ShowErrors(ex);
}
}
public static void ShowErrors(SqlCeException e)
{
SqlCeErrorCollection errs = 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());
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -