⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form1.cs

📁 远程数据访问RDA等
💻 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 + -