Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.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# 以编程方式在asp.net标记中设置连接字符串_C#_Asp.net_.net_Connection String - Fatal编程技术网

C# 以编程方式在asp.net标记中设置连接字符串

C# 以编程方式在asp.net标记中设置连接字符串,c#,asp.net,.net,connection-string,C#,Asp.net,.net,Connection String,我正在修改一些有人编写的旧代码,他们在web.config中放置了一个连接字符串,由于业务规则,我不得不删除它。我创建了一个生成连接字符串的singleton类,并希望以类似的方式在asp.net标记中设置它,如下所示: <asp:SqlDataSource ID="DataSource" runat="server" ConnectionString='<% MyNameSpace.Credentials.Instance.DatabaseConnectionString

我正在修改一些有人编写的旧代码,他们在web.config中放置了一个连接字符串,由于业务规则,我不得不删除它。我创建了一个生成连接字符串的singleton类,并希望以类似的方式在asp.net标记中设置它,如下所示:

<asp:SqlDataSource ID="DataSource" runat="server" 
    ConnectionString='<% MyNameSpace.Credentials.Instance.DatabaseConnectionString %>'
    ProviderName="Oracle.DataAccess.Client" 
    SelectCommand="SELECT * from aTable">
</asp:SqlDataSource>

不幸的是,这不起作用,而是将该行用作文本连接字符串。有人知道如何访问像这样的内联类的属性吗?

考虑以下(并非不切实际)场景。这是一个正常的工作日上午,异常监视突然开始发送大量SQL登录错误。在给您的基础架构团队打了几通惊慌失措的电话后,很明显数据库服务器上的RAID控制器出现了故障。最近的替代品在另一个国家,至少需要48小时才能到达

幸运的是,您的DBA已经准备就绪,并已开始恢复到另一台服务器上,该服务器将在不到一个小时内可用,其中一位DBA将很快打电话告知您连接的详细信息

此时,如果您的应用程序将数据库连接详细信息存储在一个中心位置,那么您应该能够在备份数据库恢复后立即使应用程序恢复联机—在进行快速测试以确保未发生数据损坏且正常功能可用之后

如果您必须搜索项目中的每个页面和类,那么更新所有不同的连接字符串可能需要几个小时,而且您无法确定是否遗漏了一个

你不用在午餐前恢复应用程序,而是工作到深夜,用户为失去的一天而对你生气

诚然,查找/替换工具将使跟踪对服务器/数据库名称的引用变得更容易,而无需手动搜索每一行代码,但您仍然让生活变得比需要的困难得多

Microsoft在web.config文件中创建connection strings元素是有充分理由的,可以满足许多高安全性环境的需要,甚至可以为字符串提供加密以确保其安全。在契约中,即使是编译后的代码,也可以使用诸如、或之类的解决方案,几乎立即使人类可读。如果您的经理认为在编译代码中保留连接字符串更安全,那么他们就错了

如果您必须将连接字符串存储在web.config之外,那么我建议您为此创建一个实用程序类-

using System;

namespace YourApplicationNameSpace
{
    public static class Common
    {
        public static string DatabaseConnectionString
        {
            get { return "server=myserver;database=Products;uid=salesUser;pwd=sellMoreProducts"; }
        }
    }
}
然后可以将该字符串添加到页面的声明性数据源中,如下所示-

<asp:SqlDataSource ID="DataSource" runat="server" ProviderName="Oracle.DataAccess.Client" 
SelectCommand="SELECT * from aTable"></asp:SqlDataSource>
这看起来像你们公司使用的模式

我相信这也会起作用(注意等号的添加)-

然后开始寻找新的工作,因为维护代码将是一场噩梦

另请注意,您应该确保使用的是SQL,尤其是在更新或删除数据时,以避免存储过程,甚至是更好的存储过程(也使用正确构造的参数)。

考虑以下(并非不切实际的)情况。这是一个正常的工作日上午,异常监视突然开始发送大量SQL登录错误。在给您的基础架构团队打了几通惊慌失措的电话后,很明显数据库服务器上的RAID控制器出现了故障。最近的替代品在另一个国家,至少需要48小时才能到达

幸运的是,您的DBA已经准备就绪,并已开始恢复到另一台服务器上,该服务器将在不到一个小时内可用,其中一位DBA将很快打电话告知您连接的详细信息

此时,如果您的应用程序将数据库连接详细信息存储在一个中心位置,那么您应该能够在备份数据库恢复后立即使应用程序恢复联机—在进行快速测试以确保未发生数据损坏且正常功能可用之后

如果您必须搜索项目中的每个页面和类,那么更新所有不同的连接字符串可能需要几个小时,而且您无法确定是否遗漏了一个

你不用在午餐前恢复应用程序,而是工作到深夜,用户为失去的一天而对你生气

诚然,查找/替换工具将使跟踪对服务器/数据库名称的引用变得更容易,而无需手动搜索每一行代码,但您仍然让生活变得比需要的困难得多

Microsoft在web.config文件中创建connection strings元素是有充分理由的,可以满足许多高安全性环境的需要,甚至可以为字符串提供加密以确保其安全。在契约中,即使是编译后的代码,也可以使用诸如、或之类的解决方案,几乎立即使人类可读。如果您的经理认为在编译代码中保留连接字符串更安全,那么他们就错了

如果您必须将连接字符串存储在web.config之外,那么我建议您为此创建一个实用程序类-

using System;

namespace YourApplicationNameSpace
{
    public static class Common
    {
        public static string DatabaseConnectionString
        {
            get { return "server=myserver;database=Products;uid=salesUser;pwd=sellMoreProducts"; }
        }
    }
}
然后可以将该字符串添加到页面的声明性数据源中,如下所示-

<asp:SqlDataSource ID="DataSource" runat="server" ProviderName="Oracle.DataAccess.Client" 
SelectCommand="SELECT * from aTable"></asp:SqlDataSource>
这看起来像你们公司使用的模式

我相信这也会起作用(注意等号的添加)-

然后开始寻找新的工作,因为维护代码将是一场噩梦


另请注意,您应该确保使用的是SQL,尤其是在更新或删除数据时,以避免存储过程或更好的存储过程(也使用正确构造的参数)。

我现在无法尝试确定,但是你不需要吗?我已经试过了,但它也不起作用。请记住,web.config或实用程序类中的公共/共享连接字符串将极大地提高应用程序的易维护性。计划预期
protected void Page_Load(object sender, EventArgs e)
{
    DataSource.ConnectionString = "server=myserver;database=Products;uid=salesUser;pwd=sellMoreProducts";
}