C# 以编程方式在asp.net标记中设置连接字符串
我正在修改一些有人编写的旧代码,他们在web.config中放置了一个连接字符串,由于业务规则,我不得不删除它。我创建了一个生成连接字符串的singleton类,并希望以类似的方式在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
<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";
}