.NET Azure数据库上传:Package/Publish SQL及web.config转换疑问
关于Azure数据库发布与web.config连接字符串转换的问题解答
一、仅添加Azure连接字符串到Package/Publish SQL能上传本地数据库到Azure吗?
答案是不行哦。Package/Publish SQL模块的作用是帮你部署数据库架构和数据到目标环境,但只填目标Azure的连接字符串只是指定了「部署到哪里」,却没告诉它「要部署什么内容」——也就是你的本地数据库的结构和数据。
你需要完成这几个关键步骤才能把本地数据库上传到Azure:
- 在Package/Publish SQL设置里,首先要指定源数据库:选择你本地的数据库实例和具体库,这样工具才知道要从哪里获取架构和数据。
- 配置部署选项:比如是否生成架构同步脚本、是否包含数据、是否忽略某些对象(比如临时表)等。
- 最后才是填写目标Azure数据库的连接字符串(带用户名和密码),用来指定部署的目标位置。
只有把这些都配置好,工具才能生成对应的部署脚本,把本地的数据库内容同步到Azure SQL数据库中。
二、web.config的连接字符串转换配置方法
如果你是用Visual Studio的web.config转换功能(比如针对Release环境),可以这样配置Web.Release.config文件:
假设你的本地web.config里的连接字符串是这样的:
<configuration> <connectionStrings> <add name="MyDatabaseConnection" connectionString="Data Source=LOCAL_SERVER;Initial Catalog=LocalDb;Integrated Security=True" providerName="System.Data.SqlClient" /> </connectionStrings> </configuration>
那么在Web.Release.config里,你可以用SetAttributes转换来替换连接字符串的值:
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> <connectionStrings> <add name="MyDatabaseConnection" connectionString="Server=tcp:your-azure-sql-server.database.windows.net,1433;Initial Catalog=YourAzureDb;Persist Security Info=False;User ID=YourUserName;Password=YourPassword;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" providerName="System.Data.SqlClient" xdt:Transform="SetAttributes" xdt:Locator="Match(name)" /> </connectionStrings> </configuration>
关键说明:
xdt:Locator="Match(name)":指定根据name属性匹配要转换的连接字符串节点,确保只修改对应名称的节点。xdt:Transform="SetAttributes":表示只修改该节点的属性(这里就是connectionString的值),而不是替换整个节点。
另外,更推荐的做法是在Azure App Service的应用设置里配置连接字符串,这样不需要修改web.config或者转换文件,发布后App Service会自动覆盖web.config里的对应值,安全性也更高(密码不会暴露在代码或配置文件里)。不过如果一定要用web.config转换,上面的配置就可以满足需求。
内容的提问来源于stack exchange,提问作者Lucie
相关产品推荐
相关产品推荐

