C# 以编程方式连接到 SQL 服务器 CE

Posted

技术标签:

【中文标题】C# 以编程方式连接到 SQL 服务器 CE【英文标题】:C# Connect to a SQL server CE programmatically 【发布时间】:2011-11-02 10:26:51 【问题描述】:

我对数据库编程完全陌生。我正在使用 Visual Studio 2010 并希望以编程方式创建数据库。

到目前为止,我已经尝试像这样连接到 SQL Server Compact Edition:

public class HistoryDBAccess

    private SqlConnection conn = new SqlConnection();

    public HistoryDBAccess()
    
        conn.ConnectionString = @"Server=localhost;Integrated security=SSPI;database=master";
        string str = "CREATE DATABASE MyDatabase ON PRIMARY " +
            "(NAME = MyDatabase_Data, " +
            "FILENAME = 'C:\\MyDatabaseData.mdf', " +
            "SIZE = 2MB, MAXSIZE = 10MB, FILEGROWTH = 10%) " +
            "LOG ON (NAME = MyDatabase_Log, " +
            "FILENAME = 'C:\\MyDatabaseLog.ldf', " +
            "SIZE = 1MB, " +
            "MAXSIZE = 5MB, " +
            "FILEGROWTH = 10%)";

        SqlCommand myCommand = new SqlCommand(str, conn);
        try
        
            conn.Open();
            myCommand.ExecuteNonQuery();
            MessageBox.Show("DataBase is Created Successfully", "MyProgram", MessageBoxButtons.OK, MessageBoxIcon.Information);
        
        catch (System.Exception ex)
        
            MessageBox.Show(ex.ToString(), "MyProgram", MessageBoxButtons.OK, MessageBoxIcon.Information);
        
        finally
        
            if (conn.State == System.Data.ConnectionState.Open)
            
                conn.Close();
            
        

    

Ctor 中的连接失败,并显示无法建立连接的消息。

使用VS2010的数据库向导很好,但是如何在windows 7下看到SQLCe服务器呢?

它是否在控制面板下方,我需要在连接字符串中输入默认密码吗?

非常感谢,

于尔根

【问题讨论】:

查看这个:***.com/questions/6196274/… 你的连接字符串中没有密码吗? @Piras:非常感谢。这就是我要找的东西,尤其是 SqlCeEngine 对象! 【参考方案1】:

我认为您应该使用服务器资源管理器(或数据库资源管理器)在您的项目中添加与数据库的连接,然后检查您的连接字符串。

【讨论】:

【参考方案2】:

您似乎试图在打开连接之前传递 con 对象。

所以试试这个并告诉我。

 public HistoryDBAccess()
    
        conn.ConnectionString = @"Server=localhost;Integrated security=SSPI;database=master";
        string str = "CREATE DATABASE MyDatabase ON PRIMARY " +
            "(NAME = MyDatabase_Data, " +
            "FILENAME = 'C:\\MyDatabaseData.mdf', " +
            "SIZE = 2MB, MAXSIZE = 10MB, FILEGROWTH = 10%) " +
            "LOG ON (NAME = MyDatabase_Log, " +
            "FILENAME = 'C:\\MyDatabaseLog.ldf', " +
            "SIZE = 1MB, " +
            "MAXSIZE = 5MB, " +
            "FILEGROWTH = 10%)";
          conn.Open();

        SqlCommand myCommand = new SqlCommand(str, conn);
        try
        

            myCommand.ExecuteNonQuery();
            MessageBox.Show("DataBase is Created Successfully", "MyProgram", MessageBoxButtons.OK, MessageBoxIcon.Information);
        
        catch (System.Exception ex)
        
            MessageBox.Show(ex.ToString(), "MyProgram", MessageBoxButtons.OK, MessageBoxIcon.Information);
        
        finally
        
            if (conn.State == System.Data.ConnectionState.Open)
            
                conn.Close();
            
        

    

【讨论】:

这也不起作用。我猜连接字符串有问题。 @Juergen:它抛出的异常是什么?我们需要错误,我们可以为您解决。我没有 SQL CE。 用户询问 SQL Server Compact @ErikEj,我知道他在询问 SQl CE,您无需将答案标记下来。我告诉他试试。我从来没有说过这是正确的答案..【参考方案3】:

创建它后,您可能会想要与它进行交互。您应该考虑使用 NHibernate。它有一个名为 SchemaExport 的功能,可以随意删除和创建数据库。

这是一个使用 SQL Express 的示例,但使用 Compact Edition 并没有太大的不同。您可以通过在 Visual Studio 中打开 NHibernate 并单击 Project > Manage NuGet Packages,然后在 All Online 中搜索 NHibernate 来将 NHibernate 安装到您的项目中。

public class NHContext

    protected static Configuration NHConfiguration;
    protected static ISessionFactory SessionFactory;

    public static void DropDatabase()
    
        new SchemaExport(NHConfiguration).Drop(false, true);
    

    public static void CreateDatabase()
    
        new SchemaExport(NHConfiguration).Create(false, true);
    

    protected static Configuration configureNHibernate()
    
        var configure = new Configuration();
        configure.SessionFactoryName("BuildIt");

        configure.DataBaseIntegration(db =>
        
            db.Dialect<MsSql2008Dialect>();
            db.Driver<Sql2008ClientDriver>();//db.Driver<SqlClientDriver>();
            db.KeywordsAutoImport = Hbm2DDLKeyWords.AutoQuote;
            db.IsolationLevel = IsolationLevel.ReadCommitted;
            db.ConnectionString = @"Data Source=.\SQLEXPRESS;Persist Security Info=True;Integrated Security=SSPI;Initial Catalog=NHibernate32Test;User Instance=False";
            db.Timeout = 10;

            // For testing
            db.LogFormattedSql = true;
            db.LogSqlInConsole = true;
            db.AutoCommentSql = true;
        );

        return configure;
    

    public static void Setup()
    
        NHConfiguration = configureNHibernate();
        HbmMapping mapping = getMappings();
        NHConfiguration.AddDeserializedMapping(mapping, "NHibernate32Test");
        SchemaMetadataUpdater.QuoteTableAndColumns(NHConfiguration);
        SessionFactory = NHConfiguration.BuildSessionFactory();
    

【讨论】:

用户在询问 SQL Server Compact! 是的 - 正如我在回答中所说 - 修改 SqlCE 很简单。

以上是关于C# 以编程方式连接到 SQL 服务器 CE的主要内容,如果未能解决你的问题,请参考以下文章

c# winform程序怎么连接到本地sqlserver 数据库啊

无法从 MYSQL Workbench 6.3 CE 连接到 MS SQL 服务器 [重复]

SQL Management Studio 连接到 SQL CE

如何以编程方式将客户端连接到 WCF 服务?

如何以编程方式连接到 ***?

Node.js - 以编程方式连接到 *** 或通过 *** 路由 HTTP 请求