检索SQL Azure数据库的连接字符串,该数据库链接到使用C#.NET的Windows Azure网站

检索SQL Azure数据库的连接字符串,该数据库链接到使用C#.NET的Windows Azure网站,c#,asp.net,azure,C#,Asp.net,Azure,Windows Azure网站的配置页具有“连接字符串”部分。本节列出了链接资源的连接字符串。如何以编程方式检索链接的SQL Azure数据库的连接字符串?解决方案 以编程方式检索连接字符串,如下所示: connString = Environment.GetEnvironmentVariable("PREFIX_myConnStringName"); <add name="myConnStringName" connectio

Windows Azure网站的配置页具有“连接字符串”部分。本节列出了链接资源的连接字符串。如何以编程方式检索链接的SQL Azure数据库的连接字符串?

解决方案

以编程方式检索连接字符串,如下所示:

connString = 
    Environment.GetEnvironmentVariable("PREFIX_myConnStringName");
<add name="myConnStringName" 
    connectionString="you can leave this blank"
    providerName="System.Data.SqlClient" />  
解释

Azure连接字符串将成为环境变量。说明Azure使用以下方式创建变量:

connString = 
    Environment.GetEnvironmentVariable("PREFIX_myConnStringName");
<add name="myConnStringName" 
    connectionString="you can leave this blank"
    providerName="System.Data.SqlClient" />  
SQL Server:SQLCONNSTR\u myConnStringName

MySQL:MYSQLCONNSTR\u myConnStringName

SQL数据库:SQLAZURECONNSTR\u myConnStringName

自定义:CUSTOMCONNSTR\u myConnStringName

SQL Azure:SQLAZURECONNSTR\u myConnStringName

知道了这一点,我们可以使用以下代码检索所需的连接字符串:

connString = 
    Environment.GetEnvironmentVariable("SQLAZURECONNSTR_myConnStringName");
其他选项

作为另一个选项,下面介绍如何通过web.config访问连接字符串:

connString = 
    Environment.GetEnvironmentVariable("PREFIX_myConnStringName");
<add name="myConnStringName" 
    connectionString="you can leave this blank"
    providerName="System.Data.SqlClient" />  

注意:我们可能不必包含providerName属性

进一步研究

通过将此代码放到Razor视图中,我们可以查看所有可用的环境变量和连接字符串。警告:这将显示您的密码

<ul>
    @foreach (System.Collections.DictionaryEntry ev in Environment.GetEnvironmentVariables())
    {
        if (ev.Value.ToString().ToLower().Contains("data source"))
        {
            <li><strong>@ev.Key.ToString()</strong> @ev.Value.ToString()</li>
        }
    }
</ul>

<ul>
    @foreach (System.Configuration.ConnectionStringSettings cs in System.Configuration.ConfigurationManager.ConnectionStrings)
    {
        <li><strong>@cs.Name</strong> @cs.ConnectionString</li>
    }
</ul>
    @foreach(System.Collections.DictionaryEntry ev in Environment.GetEnvironmentVariables()) { 如果(ev.Value.ToString().ToLower()包含(“数据源”)) {
  • @ev.Key.ToString()@ev.Value.ToString()
  • } }
    @foreach(System.Configuration.ConnectionString在System.Configuration.ConfigurationManager.ConnectionString中设置cs) {
  • @cs.Name@cs.ConnectionString
  • }

现在就到此为止。

以这种方式将连接字符串作为环境变量似乎是错误的。您可以在连接字符串下定义它,然后从IConfiguration接口调用GetConnectionString,而不必使它更复杂,也不必使用数据库字符串作为前缀

试试下面的方法,这样做会简单得多

IConfiguration config = new ConfigurationBuilder()
    .AddEnvironmentVariables()
    .Build();

var connection = _config.GetConnectionString("DatabaseConnection");
另请参见:关于您的“其他选项”:如果我在web.config文件中包含该代码段,我将如何在本地调试我的应用程序?我这样问是因为在这种情况下,除了在Azure上之外,永远不会指定连接字符串。