簡體   English   中英

在C#中以編程方式創建本地數據庫

[英]Create a local database programmatically in c#

我正在嘗試創建一個包裝類來創建數據庫。

我希望通過使用create和delete函數在代碼中創建和銷毀數據庫。

我在線閱讀了使用DROP DATABASE會破壞數據庫的信息,但是由於無法編寫create函數,因此無法檢查是否正確解釋了信息。

我發現的示例全部用於包含服務器的.mdf數據庫。

我的數據庫將僅在本地使用,並且將包含一個數據表。

數據庫將在創建時由用戶選擇的數據文件填充。

下面是我已經開始寫的課。

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlServerCe;
using System.Windows.Forms;
using System.IO;

namespace DatabaseForm
{
    class DatabaseManager
    {

        private SqlCeConnection _sqlConnection;
        private string _cacheDatabase;
        private string _password;

        /// <summary>
        /// 
        /// </summary>
        public DatabaseManager()
        {
        }

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        private string ConnectionString()
        {
            return string.Format("DataSource=\"{0}\"; Password='{1}'", this._cacheDatabase, this._password);
        }

        /// <summary>
        /// 
        /// </summary>
        private void Open()
        {
            if (_sqlConnection == null)
            {
                _sqlConnection = new SqlCeConnection(this.ConnectionString());
            }

            if (_sqlConnection.State == ConnectionState.Closed)
            {
                _sqlConnection.Open();
            }
        }

        /// <summary>
        /// 
        /// </summary>
        private void Close()
        {
            if (_sqlConnection != null)
            {
                if (_sqlConnection.State == ConnectionState.Open)
                {
                    _sqlConnection.Close();
                }
            }
        }

        /// <summary>
        /// 
        /// </summary>
        public void CreateDatabase(string dbname, string password)
        {
            string strCommand;
            try
            {
                Open();
                strCommand = "CREATE DATABASE " + dbname;
                SqlCeCommand sqlCommand = new SqlCeCommand(strCommand, _sqlConnection);
                sqlCommand.ExecuteNonQuery();
                Close();

                _cacheDatabase = new System.IO.FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).DirectoryName + dbname;
                _password = password;
            }
            catch (Exception exc)
            {
                MessageBox.Show("Error in CreateDatabase(): " + exc.Message);
            }
        }

        /// <summary>
        /// 
        /// </summary>
        public void Delete()
        {
            string strCommand;
            try
            {
                Open();
                strCommand = "DROP DATABASE MyTable";
                SqlCeCommand sqlCommand = new SqlCeCommand(strCommand, _sqlConnection);
                sqlCommand.ExecuteNonQuery();
                Close();
            }
            catch (Exception exc)
            {
                MessageBox.Show("Error in Delete(): " + exc.Message);
            }
        }
    }
}

在擔心課程可能會失敗之前,我想先完成此工作。 我將在以后添加防御代碼。

因此,問題所在與SqlCeConnection有關。 創建數據庫需要連接字符串是什么?

創建數據庫后,我可以使用:

_cacheDatabase = new System.IO.FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).DirectoryName + "\\MyDatabase.sdf";
_password = "";
string.Format("DataSource=\"{0}\"; Password='{1}'", _cacheDatabase, _password);

但是,直到調用CREATE DATABASE后,MyDatabase.sdf才存在。

因此,連接字符串是什么?

為什么要打擾“ DROP DATABASE”。 使用SQL Server CE時,數據庫是一個文件。 刪除文件就足夠

如果您真的想要DROP / CREATE的數據庫,那么正確獲取腳本的最簡單方法是在SQL Management Studio中創建示例數據庫,然后右鍵單擊該數據庫,然后選擇Tasks > Generate Scrips...

有很多選項可供選擇,其中包括DROP / CREATE 然后,您需要關心的是如何執行腳本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM