使用.mdf数据库

时间:2017-08-30 13:10:24

标签: c# sql-server database-connection sql-server-express

我正在开发一个用于学习的C#数据库应用程序,并且我试图在客户端计算机上部署它并遇到连接问题。

//NOTE: path and database variables have correct info because it works on my dev machine
"Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=" + path + "\\" + databaseName + ";Integrated Security=True"

我正在使用 Install Shield 来创建设置,并尝试了高级安装程序

在我安装的另一台测试机上:

  • .Net Framework 4.5.2
  • SQLLocalDB.msi(x64位)

最后,我安装了部署的安装文件,我得到了一个异常:

System.Data.SqlClient.SqlException (0x80131904). A network related or instance-specific error occured while establishing a connection to SQL server. 
The server was not found or not accessible.
Localdatabase Runtime error occured.

我也在连接字符串中尝试了这些:(在stackoverflow上的类似问题中找到)

  • localhost
  • localhost\\SQLExpress
  • .\\SQLExpress

但这对我来说都不起作用。

注意:

  • 我的LocalDB连接字符串正在开发机器上工作。
  • 使用Visual Studio 2015 Enterprise

PS:我想要学习的是一种创建安装程序的方法,该安装程序可以安装一些像.Net Framework,LocalDB等等,并且可以在客户端计算机上运行基于数据库的应用程序而无需安装SQL服务器单独。我不确定.mdf方式是否适合这种方式。

2 个答案:

答案 0 :(得分:1)

我建议您使用SQLite数据库,因为过程和功能几乎相似。部署非常简单;它只需要很少的DLL来使它工作。

<强>准则:

首先,您需要System.Data.SQLite库,然后需要在项目中添加System.Data.SQLite.dll作为参考。请记住,SQLite.Interop.dll也需要位于可执行文件目录中,但不需要在项目中添加为引用。

此外,如果您的应用程序针对任何CPU,则很可能会出现异常。因此,请务必导航至项目属性 - &gt;构建并将平台目标设置为您已下载的System.Data.SQLite.dll二进制文件的位版本。

由于您是初学者,所以这里是分步指南和示例代码。

<强>步骤:

  1. 导航Tools > NuGet Package Manager > Manage NuGet Packages for Solution
  2. 搜索对于:SQLite
  3. 选择 System.Data.SQLite(将是第一个结果)
  4. 点击
  5. 上的
  6. 导入

    using System.Data.SQLite;
    
  7. 连接已准备就绪,此处为示例代码

    System.Data.SQLite.SQLiteConnection.CreateFile("sqlite.db3");
    
    using(System.Data.SQLite.SQLiteConnection conn = new System.Data.SQLite.SQLiteConnection("data source=sqlite.db3")){
        using(System.Data.SQLite.SQLiteCommand cmd = new System.Data.SQLite.SQLiteCommand(conn)){
            conn.Open();
            cmd.CommandText = @"CREATE TABLE IF NOT EXISTS
                                [persons](
                                [id] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
                                [name] VARCHAR(50) NULL
                                )";
    
            cmd.ExecuteNonQuery();
    
            cmd.CommandText = "INSERT INTO [persons] (name) values('Atlas')";
            cmd.ExecuteNonQuery();
    
            cmd.CommandText = "SELECT * FROM [persons]";
    
            using(System.Data.SQLite.SQLiteDataReader reader = cmd.ExecuteReader()){
                while(reader.Read()){
                    MessageBox.Show(reader["name"].ToString());
                }
    
            conn.Close();
    
            }
    
        }
    }
    

    <强>提示:

    希望这有帮助! :)

答案 1 :(得分:0)

其中一个有帮助吗?

Attach a database file on connect to a local SQL Server Express instance

Server=.\SQLExpress;AttachDbFilename=C:\MyFolder\MyDataFile.mdf;Database=dbname;
Trusted_Connection=Yes;

Attach a database file, located in the data directory, on connect to a local SQL Server Express instance

Server=.\SQLExpress;AttachDbFilename=|DataDirectory|mydbfile.mdf;Database=dbname;
Trusted_Connection=Yes;