在WPF应用程序中连接和使用SQL Compact Edition

本文关键字:SQL Compact Edition WPF 应用程序 连接 | 更新日期: 2023-09-27 18:27:23

我只是跟上了WPF和C#的步伐。我已经写了一个完整的桌面应用程序,它还可以。我现在正在开发一个数据库驱动的应用程序(数据库是一个临时存储,应用程序将与实时服务器同步)。我选择了MsSql Compact Edition作为我的应用程序数据库,但我似乎没有找到任何教程来分解WPF程序中数据库的连接、访问和管理。我对数据库、RDBMS和ORM有很好的背景知识,比如PHP和MySql。转到桌面/MS应用程序,我有以下问题。

  1. 创建数据库(我可以在VS 2012中尝试,但欢迎提示)
  2. 将其添加(绑定)到应用程序
  3. 对其执行CRUD(一个简单的类或示例)
  4. 在同一解决方案的两个项目中使用一个数据库的可能性
  5. 我应该知道的其他事情,不要遗漏可用的ORM(如果有)和他们各自的文件

如果使用MySql这样的数据库引擎和PHP来关联答案,我会很高兴。我只需要崩溃一下。

我们将不胜感激。

提前谢谢。

在WPF应用程序中连接和使用SQL Compact Edition

SqlCompact只是在本地文件系统上创建一个文件(.sdf)。你可以在运行中创建它,然后在完成后删除它。。或者把它留在身边。以下是我从一个曾经做过的项目中截取的一些代码片段。它应该有助于解决创建/CRUD问题。

using System.Data.SqlServerCe;
private SqlCeConnection InitializeDatabase()
{
    string connectionString = CreateDatabase();
    SqlCeConnection conn = new SqlCeConnection(connectionString);
    conn.Open();
    CreateTable(conn);
    return conn;
}
private string CreateDatabase()
{
    string dbPath = String.Format("{0}scanner.sdf", _rootPath);
    if (File.Exists(dbPath))
        File.Delete(dbPath);
    string connectionString = String.Format("DataSource='"{0}'";Max Database Size=3000;", dbPath);
    SqlCeEngine en = new SqlCeEngine(connectionString);
    en.CreateDatabase();
    en.Dispose();
    return connectionString;
}
private void CreateTable(SqlCeConnection conn)
{
    using (SqlCeCommand comm = new SqlCeCommand())
    {
        comm.Connection = conn;
        comm.CommandType = CommandType.Text;
        comm.CommandText = "CREATE TABLE gnis ([Id] [int] IDENTITY(1,1) PRIMARY KEY, [Name] [nvarchar](110) NOT NULL, [Geometry] [varbinary](429) NOT NULL)";
        comm.ExecuteNonQuery();
    }
}
private void CreateTableIndex(SqlCeConnection conn)
{
    using (SqlCeCommand comm = new SqlCeCommand())
    {
        comm.Connection = conn;
        comm.CommandType = CommandType.Text;
        comm.CommandText = "CREATE INDEX IXgnis ON gnis ([Name]);";
        comm.ExecuteNonQuery();
    }
}
private void WriteFeature(SqlCeConnection conn, string name, MultiPoint multiPoint)
{
    byte[] wkb = WkbWriter.WriteWkb(multiPoint);
    using (SqlCeCommand comm = new SqlCeCommand())
    {
        comm.Connection = conn;
        comm.CommandType = CommandType.Text;
        comm.CommandText = "INSERT INTO gnis ([Name], [Geometry])  VALUES (@a, @b)";
        comm.Parameters.AddWithValue("@a", name);
        comm.Parameters.AddWithValue("@b", wkb);
        comm.ExecuteNonQuery();
    }
}