【问题标题】:C# Connect to a SQL server CE programmaticallyC# 以编程方式连接到 SQL 服务器 CE
【发布时间】: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服务器呢?

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

非常感谢,

于尔根

【问题讨论】:

标签: c# database sql-server-ce


【解决方案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 很简单。
    猜你喜欢
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    相关资源
    最近更新 更多