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

C# 在WPF应用程序中连接和使用SQL Compact Edition,c#,wpf,database,visual-studio-2012,sql-server-ce,C#,Wpf,Database,Visual Studio 2012,Sql Server Ce,我只是在跟WPF和C保持联系。我已经写了一个完整的桌面应用程序,一切正常。我现在正在开发一个数据库驱动的应用程序(数据库是一个临时存储,应用程序将与一个实时服务器同步)。我选择了MsSql Compact Edition作为我的应用程序数据库,但我似乎没有找到任何在WPF程序中中断连接、访问和管理数据库的教程。我对PHP和MySql等数据库、RDBMS和ORM有很好的背景知识。转到桌面/MS应用程序,我有以下问题 using System.Data.SqlServerCe; private S

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

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();
    }
}
  • 创建数据库(我可以在VS 2012中尝试,但欢迎提供提示)
  • 将其添加(绑定)到应用程序
  • 对其执行CRUD(简单类或示例)
  • 在同一解决方案的两个项目中使用一个数据库的可能性
  • 我应该知道的其他事情,不包括可用的ORM(如果可用)及其各自的文档
  • 如果答案与使用数据库引擎(如MySql和PHP)相关,我会很高兴。我只需要休息一下

    如有答复,将不胜感激


    提前感谢。

    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();
        }
    }
    

    竖起大拇指,她是一个很好的开端,我得到了另一个教程,虽然有这个和那个,我准备好去。有一些变量没有声明,有使用不清楚,如果你张贴使用的依赖列表,我将不胜感激。另外,请询问
    WkbWriter.WriteWkb(多点)的用途
    方法和
    多点
    命名空间未知。谢谢,这只是代码片段。。不是全班。忽略几何的东西。