Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用ClickOnce部署更新本地SQL Server数据库_C#_.net_Deployment_Clickonce_Sql Server Ce - Fatal编程技术网

C# 使用ClickOnce部署更新本地SQL Server数据库

C# 使用ClickOnce部署更新本地SQL Server数据库,c#,.net,deployment,clickonce,sql-server-ce,C#,.net,Deployment,Clickonce,Sql Server Ce,我正在构建一个应用程序,它将使用一些设置和本地SQL Server。我的问题是,何时更新应用程序;设置或数据是否会被覆盖 如果我想在将来更改某些表,会发生什么情况?在通过ClickOnce进行更新期间,用户级设置不会被覆盖,但您可以推送新的应用程序级设置,因为更新期间将覆盖[YourExeName].exe.config文件 如果需要覆盖用户级设置,则必须以编程方式完成。坦率地说,我一直认为ClickOnce处理数据的方式是危险的。如果使用ClickOnce部署数据库,它会将其放在DataDir

我正在构建一个应用程序,它将使用一些设置和本地SQL Server。我的问题是,何时更新应用程序;设置或数据是否会被覆盖


如果我想在将来更改某些表,会发生什么情况?

在通过ClickOnce进行更新期间,用户级设置不会被覆盖,但您可以推送新的应用程序级设置,因为更新期间将覆盖
[YourExeName].exe.config
文件


如果需要覆盖用户级设置,则必须以编程方式完成。

坦率地说,我一直认为ClickOnce处理数据的方式是危险的。如果使用ClickOnce部署数据库,它会将其放在DataDirectory中。然后,当您将更新部署到应用程序时,它会将数据库复制到安装下一版本应用程序的文件夹中。但是,如果数据库发生更改,它会将其复制到+\pre文件夹,并将一个新文件夹放入datadirectory中。如果你没有意识到你改变了它,它会取代它。如果您打开一个SQLCE数据库并检查数据结构,那么将部署它。惊喜

我认为将数据存储在用户配置文件下的另一个文件夹中更有意义,而且更安全。然后,您可以选择何时更新数据库。将显示如何移动您的数据,使其不受ClickOnce更新的影响

此外,当您确实希望对数据库进行更改时,可以使用SQL语句进行更改,如“ALTERTABLE”等。我创建了一个脚本,并将其作为一个长字符串(其中包含回车符)进行部署,并让应用程序通过回车符将资源拆分,然后逐个执行语句。你知道大概的意思了

关于用户设置的一个注释——您可以通过UI以编程方式更改这些设置(即,为用户提供功能)。但请注意,如果您更改应用程序的证书并运行足够高的.NET版本(3.5,4),它本身不会给您带来问题,但它与ClickOnce应用程序具有不同的标识,并且在发布下一次更新时不会结转用户设置。出于这个原因,我还为配置数据滚动了自己的XML文件,并将其存储在LocalApplicationData中