关于conn.asp和web.config文件的问题

touch_hand 2010-03-03 11:42:21
在conn.asp和web.config里面都有数据库连接路径,这两者有什么差别?

web.config是存储ASP.NET web应用程序的配置信息的,格式和名字都是固定的

conn.asp同样具有连接数据库的作用,和web.config有什么关系和区别呢?
...全文
56 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
leonbingo 2010-03-03
  • 打赏
  • 举报
回复
Conn.asp相当于一个静态类,你什么地方需要用到他的时候,需要将这个文件include进来,你才能使用,但是web.config是站点配置文件,如楼上所说,提供了api来对之进行访问,也就不需要你做个什么include操作了,这个是asp.net和asp本质的不一样
guanmingle 2010-03-03
  • 打赏
  • 举报
回复
在.net编程中,我们经常用到config文件来保存一些常用的应用程序配置信息,在WinForm中这个文件名字是app.config,在asp.net中叫web.config。这个.config文件其实就是一个xml文件,对它的读操作微软已经提供了一个类来实现了,这个类就是System.Configuration.ConfigurationManager,下面分别是例子:

//读取config里名称为“conn”数据库连接信息

connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["conn"].ConnectionString;

//读取config里名称为"Font_Size"的应用程序配置信息

System.Configuration.ConfigurationManager.AppSettings["Font-Size"] = 9;

不过利用这个类却不能对config文件进行写操作。对于config文件的写操作,很多人通过xml的方式来进行,按照xml的方式进行写操作在WinForm下虽然繁琐点,但是毕竟能完成。以下是按照xml文件进行写的例子。



#region 保存配置

XmlDocument document = LoadXml();

XmlNode root = document.DocumentElement;

XmlNodeList nodeList = root.FirstChild.ChildNodes;

for (int i = 0; i < nodeList.Count; i++)

{

string key = nodeList[i].Attributes["key"].Value;

if (key == "FilterOption")

{

nodeList[i].Attributes["value"].Value = ((int)container.FilterOption).ToString();

}

}

document.Save(configPath);

#endregion



但是在WebForm下,往往会因为权限不足而报错。



本文提供了另外一种方式,利用.net2.0类库里面的Configuration来进行写操作。详细介绍请看下面的详细介绍。







Configuration 是允许进行编程访问以编辑配置文件的类。对于WebForm的config文件,可以用如下代码得到Configuration类的实例:





Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(configPath);

对于WinForm的config文件,可以用如下代码得到Configuration类的实例:









Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(configPath);

需要注意的是,对文件进行写操作之后,需要调用Save()方法保存结果。整个程序的源代码如下,并附有详细代码注释。



using System;

using System.Configuration;

using System.Web;

using System.Windows.Forms;



namespace NetSkycn.Common

{

/// <summary>

/// 说明:Config文件类型枚举,

/// 分别为asp.net网站的config文件和WinForm的config文件

/// 作者:周公

/// 日期:2008-08-23

/// 首发地址:http://blog.csdn.net/zhoufoxcn/archive/2008/08/24/2823508.aspx

/// </summary>

public enum ConfigType

{

/// <summary>

/// asp.net网站的config文件

/// </summary>

WebConfig = 1,

/// <summary>

/// Windows应用程序的config文件

/// </summary>

ExeConfig = 2

}



/// <summary>

/// 说明:本类主要负责对程序配置文件(.config)进行修改的类,

/// 可以对网站和应用程序的配置文件进行修改

/// 作者:周公

/// 日期:2008-08-23

/// 首发地址:http://blog.csdn.net/zhoufoxcn/archive/2008/08/24/2823508.aspx

/// </summary>

public class ConfigurationOperator

{

private Configuration config;

private string configPath;

private ConfigType configType;



/// <summary>

/// 对应的配置文件

/// </summary>

public Configuration Configuration

{

get { return config; }

set { config = value; }

}

/// <summary>

/// 构造函数

/// </summary>

/// <param name="configType">.config文件的类型,只能是网站配置文件或者应用程序配置文件</param>

public ConfigurationOperator(ConfigType configType)

{

this.configType = configType;

if (configType == ConfigType.ExeConfig)

{

configPath = Application.ExecutablePath; //AppDomain.CurrentDomain.BaseDirectory;

}

else

{

configPath = HttpContext.Current.Request.ApplicationPath;

}

Initialize();

}

/// <summary>

/// 构造函数

/// </summary>

/// <param name="path">.config文件的位置</param>

/// <param name="type">.config文件的类型,只能是网站配置文件或者应用程序配置文件</param>

public ConfigurationOperator(string configPath, ConfigType configType)

{

this.configPath = configPath;

this.configType = configType;

Initialize();

}

//实例化configuration,根据配置文件类型的不同,分别采取了不同的实例化方法

private void Initialize()

{

//如果是WinForm应用程序的配置文件

if (configType == ConfigType.ExeConfig)

{

config = System.Configuration.ConfigurationManager.OpenExeConfiguration(configPath);

}

else//WebForm的配置文件

{

config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(configPath);

}

}



/// <summary>

/// 添加应用程序配置节点,如果已经存在此节点,则会修改该节点的值

/// </summary>

/// <param name="key">节点名称</param>

/// <param name="value">节点值</param>

public void AddAppSetting(string key, string value)

{

AppSettingsSection appSetting = (AppSettingsSection)config.GetSection("appSettings");

if (appSetting.Settings[key] == null)//如果不存在此节点,则添加

{

appSetting.Settings.Add(key, value);

}

else//如果存在此节点,则修改

{

ModifyAppSetting(key, value);

}

}

/// <summary>

/// 添加数据库连接字符串节点,如果已经存在此节点,则会修改该节点的值

/// </summary>

/// <param name="key">节点名称</param>

/// <param name="value">节点值</param>

public void AddConnectionString(string key, string connectionString)

{

ConnectionStringsSection connectionSetting = (ConnectionStringsSection)config.GetSection("connectionStrings");

if (connectionSetting.ConnectionStrings[key] == null)//如果不存在此节点,则添加

{

ConnectionStringSettings connectionStringSettings = new ConnectionStringSettings(key, connectionString);

connectionSetting.ConnectionStrings.Add(connectionStringSettings);

}

else//如果存在此节点,则修改

{

ModifyConnectionString(key, connectionString);

}

}

/// <summary>

/// 修改应用程序配置节点,如果不存在此节点,则会添加此节点及对应的值

/// </summary>

/// <param name="key">节点名称</param>

/// <param name="value">节点值</param>

public void ModifyAppSetting(string key, string newValue)

{

AppSettingsSection appSetting = (AppSettingsSection)config.GetSection("appSettings");

if (appSetting.Settings[key] != null)//如果存在此节点,则修改

{

appSetting.Settings[key].Value = newValue;

}

else//如果不存在此节点,则添加

{

AddAppSetting(key, newValue);

}

}

/// <summary>

/// 修改数据库连接字符串节点,如果不存在此节点,则会添加此节点及对应的值

/// </summary>

/// <param name="key">节点名称</param>

/// <param name="value">节点值</param>

public void ModifyConnectionString(string key, string connectionString)

{

ConnectionStringsSection connectionSetting = (ConnectionStringsSection)config.GetSection("connectionStrings");

if (connectionSetting.ConnectionStrings[key] != null)//如果存在此节点,则修改

{

connectionSetting.ConnectionStrings[key].ConnectionString = connectionString;

}

else//如果不存在此节点,则添加

{

AddConnectionString(key, connectionString);

}

}

/// <summary>

/// 保存所作的修改

/// </summary>

public void Save()

{

config.Save();

}

}

}





用法实例:

(一)WebForm中的用法







ConfigurationOperator co = new ConfigurationOperator(ConfigType.WebConfig);

string key = txtConnectionStringKey.Text;

string value = txtConnectionStringValue.Text;

co.AddConnectionString(key, value);

co.Save();

(二)WinForm中的用法



ConfigurationOperator co = new ConfigurationOperator(ConfigType.ExeConfig);

co.AddAppSetting("Font-Size", "9");

co.AddAppSetting("WebSite", "http://blog.csdn.net/zhoufoxcn");

co.AddConnectionString("Connection", "test");

co.Save();//保存写入结果

我在WinForm里加入了一个空白的app.config文件,经过上面的操作得到如下结果(这个文件是和最后生成的exe文件在同一个目录下,而不是和源代码在同一文件夹下的那个config文件):





<?xml version="1.0" encoding="utf-8" ?>

<configuration>

<appSettings>

<add key="Font-Size" value="9" />

<add key="WebSite" value="http://blog.csdn.net/zhoufoxcn" />

</appSettings>

<connectionStrings>

<add name="Connection" connectionString="test" />

</connectionStrings>

</configuration>

经过这个封装类可以简化对config配置文件的操作,仅仅是需要在实例化Configuration类的实例时指明打开的是网站还是应用程序的config文件,并且在进行了所有修改和增加操作之后调用Save()方法保存所做的修改即可。

mengyexue 2010-03-03
  • 打赏
  • 举报
回复
一个仅仅是asp文件,一个asp.net网站必须得配置文件
他两扯不上裙带关系

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧