VS 2010 C#使用SQL Server数据库创建安装文件

时间:2015-08-27 16:30:09

标签: c# sql-server-2008-express

我正在尝试为我在VS 2010中使用C#创建的应用程序创建一个正常工作的安装程序或设置文件。

我使用了InstallShield以及内置版本,他们确实创建了安装文件,我没有安装应用程序。

但是当我运行该程序时,会弹出这个东西:

enter image description here

我的数据库连接:

在表格上:

SqlConnection cn = new SqlConnection(@"SERVER=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;DATABASE=Database;Integrated Security=True;User Instance=True");

App.Config

connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True"

可能有什么不对?我的表单上的连接字符串应该与app.config文件中的连接字符串相同吗?

  • Visual Studio 2010 Ultimate
  • SQL Server 2008 Express

1 个答案:

答案 0 :(得分:1)

看起来您在开发框上运行了安装程序。

如果在连接字符串中使用AttachDbFilename并从连接字符串中省略选项Database,则sqlclient将尝试使用文件名作为数据库名称创建数据库。如果数据库已存在,则会失败。

您需要确保SqlConnection使用app.config中的连接字符串:

 SqlConnection cn = new SqlConnection(
        ConfigurationManager.
        ConnectionStrings["MyDatabaseNameInConfig"].
        ConnectionString); 

在app.config中,您需要:

<connectionStrings>
    <add name="MyDatabaseNameInConfig" 
         connectionString="Database=PRODUCTION;Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf; ...."/>
</connectionStrings>

解决此问题的方法是在发布版本的连接字符串中添加Database参数:

connectionString="Database=PRODUCTION;Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf; ...."

您可以使用XML Document Transform

在Visual Studio中自动执行该操作

另一个选择是更改您的设置以在安装时进行这些更改,但我不确定它有多容易。

最终的解决方案可能是让您的应用程序接受一个特殊的启动参数来更新连接字符串。安装程序可以在安装结束时使用该特殊参数启动应用程序。