.mdf数据库的C#应用程序部署问题

.mdf数据库的C#应用程序部署问题,c#,sql-server,database-connection,sql-server-express,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" 我

我正在开发一个用于学习的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 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
    连接字符串正在dev计算机上运行
  • 使用Visual Studio 2015 Enterprise

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

其中一个有帮助吗


我建议您使用SQLite数据库,因为过程和功能几乎相似。而且部署非常简单;它只需要几个DLL就可以工作

指南:

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

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

因为您是初学者,所以这里有一步一步的指南和示例代码

步骤:

  • 导航至:
    工具>NuGet软件包管理器>管理解决方案的NuGet软件包
  • 搜索:
    SQLite
  • 选择
    System.Data.SQLite
    (将是第一个结果)
  • 单击安装时的
  • 导入库

    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软件包管理器,那么您可以

    希望这有帮助!:)

    如前所述,我尝试过这些方法,但没有成功:(如果没有更多信息,很难说问题出在哪里。我想知道SQLExpress是否安装正确。它是否显示在Windows服务下?此外,我可能会建议像SQLite这样的东西,它不需要安装,很容易用C#项目打包,但它可能无法满足您的所有需求—只是一些而已。)您需要了解更多信息吗?
    SQL Server VSS Writer
    服务已安装,当前状态为
    started
    。感谢@Atlas\u Gondal,我将尝试此方法并重新更新。非常感谢您提供的分步指南。我能够部署我的第一个数据库应用程序。
    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();
    
            }
    
        }
    }