2017-08-30 163 views
0

我正在研究C#数据库应用程序,并试图将它部署在客户端计算机上并获取连接问题。使用.mdf数据库的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" 

我使用安装屏蔽创建的设置,并试图提前安装也。

在其它测试机器,我已经安装:

  • .Net框架4.5.2
  • SQLLocalDB.msi(64位)

最后,我安装我的部署安装文件,我得到一个例外:

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. 

我也在连接字符串中试过这些:(在simi中找到在计算器LAR问题)

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

但没有这个工作对我来说。

注:

  • LocalDB连接字符串正在开发计算机上。
  • 使用Visual Studio 2015年企业

PS:我所努力学习是一种能够创造出一些安装每requeisites喜欢.Net框架,等等的LocalDB并可以运行基于数据库应用程序的安装在客户端计算机上,无需单独安装SQL Server。我不确定.mdf的方式是否适合这一点。

回答

1

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

指引:

首先,你需要System.Data.SQLite库,然后将需要增加System.Data.SQLite.dll在你的项目的引用。请记住,SQLite.Interop.dll也需要位于您的可执行文件目录中,但不需要在项目中添加为参考。此外,如果您的应用程序针对任何CPU,您可能会遇到异常。因此,请务必导航至项目属性 - > Build,并将Platform目标设置为您下载的System.Data.SQLite.dll二进制文件的位版本。

因为你是初学者,所以这里是一步一步的指引和示例代码。

步骤:

  1. 导航到:Tools > NuGet Package Manager > Manage NuGet Packages for Solution
  2. 搜索为:SQLite
  3. 选择System.Data.SQLite(会是第一个结果)
  4. 点击上安装
  5. 进口

    using System.Data.SQLite; 
    

连接已准备就绪,这里是示例代码

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

     } 

    } 
} 

提示:

  • 始终使用try/catch块进行数据库操作
  • 如果你不喜欢使用NuGet包管理器,那么你可以download library from here

希望这有助于! :)

+0

感谢@Atlas_Gondal,我将尝试此方法并更新回 – Alena

+0

非常感谢您一步一步的指导,我能够部署我的第一个数据库应用。 – Alena

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; 
+0

正如在问题中提到,我尝试了这些方法,但没有运气:( – Alena

+0

这很难说是什么问题没有再看到更多的信息。我会怀疑是否的SQLExpress正确安装,这是否显示在Windows下服务?我也许会建议像SQLite这样的东西,不需要安装,并且可以很容易地用C#项目打包,但它可能不适合你的所有需求 - 只是要看的东西。 –

+0

你需要什么信息? 'SQL Server VSS Writer'服务已安装,并且当前状态为开始。 – Alena