.mdf 数据库的 C# 应用程序部署问题
C# application deployment issue with .mdf database
我正在开发一个用于学习的 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 创建设置并尝试了 Advance Installer。
在我安装的另一台测试机上:
- .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.
我也在连接字符串中尝试了这些:(在 Whosebug 上的类似问题中找到)
localhost
localhost\SQLExpress
.\SQLExpress
但是 none 这对我有用。
注意:
- 我的
LocalDB
连接字符串正在开发机器上工作。
- 使用 Visual Studio 2015 企业版
PS: 我想学习的是一种创建安装程序的方法,它安装一些像 .Net Framework、LocalDB 等的 per-requeisites,并且可以 运行 客户端计算机上基于数据库的应用程序,无需单独安装 SQL 服务器。我不确定 .mdf
方式是否适合这个。
这些有帮助吗?
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;
Server=.\SQLExpress;AttachDbFilename=|DataDirectory|mydbfile.mdf;Database=dbname;
Trusted_Connection=Yes;
我建议你使用SQLite数据库,因为过程和功能几乎相似。而且部署超级简单;它只需要几个 DLL 就可以运行。
指南:
首先您需要 System.Data.SQLite
库,然后需要在您的项目中添加 System.Data.SQLite.dll
作为参考。请记住,SQLite.Interop.dll
也需要位于您的可执行文件目录中,但不需要添加为项目中的引用。
此外,如果您的应用程序针对 Any CPU,您很可能会遇到异常。因此,请确保导航至 Project properties -> Build 并将平台目标设置为您下载的 System.Data.SQLite.dll
二进制文件的位版本。
由于您是初学者,因此这里是分步指南和示例代码。
步骤:
- 导航到:
Tools > NuGet Package Manager > Manage NuGet Packages for Solution
- 搜索 为:
SQLite
- Select
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 包管理器,那么您可以 download library from here
希望这对您有所帮助! :)
我正在开发一个用于学习的 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 创建设置并尝试了 Advance Installer。
在我安装的另一台测试机上:
- .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.
我也在连接字符串中尝试了这些:(在 Whosebug 上的类似问题中找到)
localhost
localhost\SQLExpress
.\SQLExpress
但是 none 这对我有用。
注意:
- 我的
LocalDB
连接字符串正在开发机器上工作。 - 使用 Visual Studio 2015 企业版
PS: 我想学习的是一种创建安装程序的方法,它安装一些像 .Net Framework、LocalDB 等的 per-requeisites,并且可以 运行 客户端计算机上基于数据库的应用程序,无需单独安装 SQL 服务器。我不确定 .mdf
方式是否适合这个。
这些有帮助吗?
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;
Server=.\SQLExpress;AttachDbFilename=|DataDirectory|mydbfile.mdf;Database=dbname;
Trusted_Connection=Yes;
我建议你使用SQLite数据库,因为过程和功能几乎相似。而且部署超级简单;它只需要几个 DLL 就可以运行。
指南:
首先您需要 System.Data.SQLite
库,然后需要在您的项目中添加 System.Data.SQLite.dll
作为参考。请记住,SQLite.Interop.dll
也需要位于您的可执行文件目录中,但不需要添加为项目中的引用。
此外,如果您的应用程序针对 Any CPU,您很可能会遇到异常。因此,请确保导航至 Project properties -> Build 并将平台目标设置为您下载的 System.Data.SQLite.dll
二进制文件的位版本。
由于您是初学者,因此这里是分步指南和示例代码。
步骤:
- 导航到:
Tools > NuGet Package Manager > Manage NuGet Packages for Solution
- 搜索 为:
SQLite
- Select
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 包管理器,那么您可以 download library from here
希望这对您有所帮助! :)