1. 程式人生 > >.Net中利用config檔案來儲存資訊

.Net中利用config檔案來儲存資訊

前言:     

        在做一些專案時,往往會有站點的一些配置資訊需要儲存,比如站點名稱,電話,聯絡人,郵箱這些等等,又因為此資訊不經常更新,而且是單一的,所以放入資料庫中會感覺佔用了不必要的一些資源。所以就會想到這些資訊放入檔案中來儲存。下面是我的一個例子,分享給大家。

1.我的專案是用的三層來寫的,我就按照三層的方式給大家呈現一下,為了方便查詢,我的檔名命名會加上當前層的首字母,M  D  B來區分。

首先建立一個Model層的實體 M_T_SysSet,下面的我的實體類中的欄位資訊。

namespace WitWMS.Model{
	 	//T_SysSet
    /// <summary>
    /// 系統基本資訊設定  Model
    /// T_SysSet
    /// </summary>
		public class M_T_SysSet
	{
        public M_T_SysSet() 
        {
        }
      
		
		private string _sysname="";
        /// <summary>
        /// 系統名稱
        /// </summary>	
        public string SysName
        {
            get{ return _sysname; }
            set{ _sysname = value; }
        }

        private string _syskeyword = "";
        /// <summary>
        /// 系統關鍵詞
        /// </summary>	
        public string SysKeyWord
        {
            get{ return _syskeyword; }
            set{ _syskeyword = value; }
        }

        private string _syshot = "";
        /// <summary>
        /// 系統敏感詞
        /// </summary>
        public string SysHot
        {
            get{ return _syshot; }
            set{ _syshot = value; }
        }

        private string _icp = "";
        /// <summary>
        /// 網站ICP備案號
        /// </summary>	
        public string ICP
        {
            get{ return _icp; }
            set{ _icp = value; }
        }

        private string _email = "";
        /// <summary>
        /// 郵件地址
        /// </summary>
        public string Email
        {
            get{ return _email; }
            set{ _email = value; }
        }

        private string _tel = "";
        /// <summary>
        ///聯絡電話
        /// </summary>
        public string Tel
        {
            get{ return _tel; }
            set{ _tel = value; }
        }

        private string _address = "";
        /// <summary>
        /// 聯絡地址
        /// </summary>
        public string Address
        {
            get{ return _address; }
            set{ _address = value; }
        }

        private int _webstate;
        /// <summary>
        /// 網站當前狀態 0維護  1開放
        /// </summary>
        public int WebState
        {
            get{ return _webstate; }
            set{ _webstate = value; }
        }

        private string _maintain = "";
        /// <summary>
        /// 維護說明
        /// </summary>	
        public string MainTain
        {
            get{ return _maintain; }
            set{ _maintain = value; }
        }        
				
		private int _photosize;
        /// <summary>
        /// 上傳圖片大小設定
        /// </summary>
        public int PhotoSize
        {
            get{ return _photosize; }
            set{ _photosize = value; }
        }        
		
	      
			
	

        private string _stopregcause = "";
        /// <summary>
        /// 註冊停止原因
        /// </summary>	
        public string StopRegCause
        {
            get{ return _stopregcause; }
            set{ _stopregcause = value; }
        }        
		
	      
			
	
        private int _filesize;
            /// <summary>
            /// 附件大小
            /// </summary>
        public int FileSize
        {
            get { return _filesize; }
            set { _filesize = value; }
        }
		   
	}
}

2.有了model層,肯定還需要DAL層。

namespace WitWMS.DAL
{

    /// <summary>
    /// 系統基本資訊設定   DAL
    /// </summary>
    public partial class D_T_SysSet
    {
        public D_T_SysSet()
        {
        }

        #region 資料訪問類:站內配置,通過配置檔案 實現      
      
            private static object lockHelper = new object();

            /// <summary>
            ///  讀取站點配置檔案
            /// </summary>
            public M_T_SysSet loadConfig(string configFilePath)
            {
                return (M_T_SysSet)SerializationHelper.Load(typeof(M_T_SysSet), configFilePath);
            }

            /// <summary>
            /// 寫入站點配置檔案
            /// </summary>
            public M_T_SysSet saveConifg(M_T_SysSet model, string configFilePath)
            {
                lock (lockHelper)
                {
                    SerializationHelper.Save(model, configFilePath);
                }
                return model;
            }
        #endregion
      }
}

3.BLL層。

namespace WitWMS.BLL
{
   
    /// <summary>
    /// 系統基本資訊設定  BLL
    /// </summary>
    public partial class B_T_SysSet
    {

        private readonly D_T_SysSet dal = new D_T_SysSet();
        /// <summary>
        /// 系統基本資訊設定  建構函式
        /// </summary>
        public B_T_SysSet(){ }           


        #region   新增通過配置檔案 讀取配置項
    

        /// <summary>
        ///  讀取配置檔案
        /// </summary>
        public M_T_SysSet loadConfig(string configFilePath)
        {
            M_T_SysSet model = CacheHelper.Get<M_T_SysSet>("cache_site_config");
            if (model == null)
            {
                CacheHelper.Insert("cache_site_config", dal.loadConfig(configFilePath), configFilePath);
                model = CacheHelper.Get<M_T_SysSet>("cache_site_config");
            }
            return model;
        }
        /// <summary>
        /// 讀取客戶端站點配置資訊
        /// </summary>
        public M_T_SysSet loadConfig(string configFilePath, bool isClient)
        {
            M_T_SysSet model = CacheHelper.Get<M_T_SysSet>("cache_site_client_config");
            if (model == null)
            {
                model = dal.loadConfig(configFilePath);

                CacheHelper.Insert("cache_site_client_config", model, configFilePath);
            }
            return model;
        }

        /// <summary>
        ///  儲存配置檔案
        /// </summary>
        public M_T_SysSet saveConifg(M_T_SysSet model, string configFilePath)
        {
            return dal.saveConifg(model, configFilePath);
        }
        #endregion
    }
 
}

4.這裡還用到了一些輔助類,我把一些常用的輔助類集中放入了Common類庫中,方便管理 。

4.1快取操作類 CacheHelper

namespace WitWMS.Common
{
    /// <summary>
    /// 快取操作類
    /// </summary>
    public class CacheHelper
    {
        /// <summary>
        /// 建立快取項的檔案依賴
        /// </summary>
        /// <param name="key">快取Key</param>
        /// <param name="obj">object物件</param>
        /// <param name="fileName">檔案絕對路徑</param>
        public static void Insert(string key, object obj, string fileName)
        {
            //建立快取依賴項
            CacheDependency dep = new CacheDependency(fileName);
            //建立快取
            HttpContext.Current.Cache.Insert(key, obj, dep);
        }

        /// <summary>
        /// 建立快取項過期
        /// </summary>
        /// <param name="key">快取Key</param>
        /// <param name="obj">object物件</param>
        /// <param name="expires">過期時間(分鐘)</param>
        public static void Insert(string key, object obj, int expires)
        {
            HttpContext.Current.Cache.Insert(key, obj, null, Cache.NoAbsoluteExpiration, new TimeSpan(0, expires, 0));
        }

        /// <summary>
        /// 獲取快取物件
        /// </summary>
        /// <param name="key">快取Key</param>
        /// <returns>object物件</returns>
        public static object Get(string key)
        {
            if (string.IsNullOrEmpty(key))
            {
                return null;
            }
            return HttpContext.Current.Cache.Get(key);
        }

        /// <summary>
        /// 獲取快取物件
        /// </summary>
        /// <typeparam name="T">T物件</typeparam>
        /// <param name="key">快取Key</param>
        /// <returns></returns>
        public static T Get<T>(string key)
        {
            object obj = Get(key);
            return obj == null ? default(T) : (T)obj;
        }

    }
}

4.2序列化與反序列化操作類  SerializationHelper

namespace WitWMS.Common
{
    /// <summary>
    /// 序列化與反序列化操作
    /// </summary>
    public class SerializationHelper
    {
        public SerializationHelper() { }

        /// <summary>
        /// 反序列化
        /// </summary>
        /// <param name="type">物件型別</param>
        /// <param name="filename">檔案路徑</param>
        /// <returns></returns>
        public static object Load(Type type, string filename)
        {
            FileStream fs = null;
            try
            {
                // open the stream...
                fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                XmlSerializer serializer = new XmlSerializer(type);
                return serializer.Deserialize(fs);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (fs != null) { 
                    fs.Close();
                }
            }
        }


        /// <summary>
        /// 序列化
        /// </summary>
        /// <param name="obj">物件</param>
        /// <param name="filename">檔案路徑</param>
        public static void Save(object obj, string filename)
        {
            FileStream fs = null;
            // serialize it...
            try
            {
                fs = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
                XmlSerializer serializer = new XmlSerializer(obj.GetType());
                serializer.Serialize(fs, obj);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (fs != null)
                {
                    fs.Close();
                }
                    
            }

        }

    }
}

4.3 Utils類

   #region 獲得配置檔案節點XML檔案的絕對路徑
        public static string GetXmlMapPath(string xmlName)
        {
            return GetMapPath(ConfigurationManager.AppSettings[xmlName].ToString());
        }
        #endregion

        #region 獲得當前絕對路徑
        /// <summary>
        /// 獲得當前絕對路徑
        /// </summary>
        /// <param name="strPath">指定的路徑</param>
        /// <returns>絕對路徑</returns>
        public static string GetMapPath(string strPath)
        {
            if (strPath.ToLower().StartsWith("http://"))
            {
                return strPath;
            }
            if (HttpContext.Current != null)
            {
                return HttpContext.Current.Server.MapPath(strPath);
            }
            else //非web程式引用
            {
                strPath = strPath.Replace("/", "\\");
                if (strPath.StartsWith("\\"))
                {
                    strPath = strPath.Substring(strPath.IndexOf('\\', 1)).TrimStart('\\');
                }
                return System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, strPath);
            }
        }
        #endregion


5.我們還需要一個config檔案,在你需要的地方建立一個config檔案,我建立了一個資料夾,專門放置一些config檔案,我的是:xmlConfig/site.config,可以根據自己需要建立。

<?xml version="1.0"?>
<M_T_SysSet>
 
</M_T_SysSet>

建立好以後,根節點最好命名成與你的Model層中配置類相同的名稱,也是為了方便後期檢視修改。

6.做好前面的,我們還需要一步操作,把這個config檔案的路徑儲存在我們的web.config檔案中,當然你也可以直接寫入你的程式中,不過建議寫入web.config中,因為你可能有多個config檔案,這樣方便管理。

在你的web.config中的appSettings節點中建立。

 <appSettings>
   

      <add key="Configpath" value="/xmlConfig/site.config"/>
  </appSettings>

7.所有都完工了,我們現在需要在頁面上填入來儲存這些資訊了。建立你自己的編輯資訊檔案,也就是aspx頁面。

名稱自己定,前臺的我就不展示了,就是些輸入框,我來展示我後臺的編輯程式碼。

7.1這是顯示資訊方法

   /// <summary>
    /// 顯示資訊
    /// </summary>
    private void ShowInfo()
    {
       //前面 我已經定義好了一個實體物件_mTSysSet
        _mTSysSet  = _bTSysSet.loadConfig(Utils.GetXmlMapPath("Configpath"));
         // hidden.Value = _mTSysSet.ID.ToString();
        sysname.Text = _mTSysSet.SysName;
        syskeyword.Text = _mTSysSet.SysKeyWord;
        syshot.Text = _mTSysSet.SysHot;
        icp.Text = _mTSysSet.ICP;
        email.Text = _mTSysSet.Email;
        tel.Text = _mTSysSet.Tel;
        address.Text = _mTSysSet.Address;
        webstate.SelectedValue = _mTSysSet.WebState.ToString();
        maintain.Text = _mTSysSet.MainTain;
        photosize.Text = _mTSysSet.PhotoSize.ToString();
        filesize.Text = _mTSysSet.FileSize.ToString();
      }

7.2這是儲存資訊方法。

    /// <summary>
    /// 儲存配置資訊
    /// </summary>
    protected void btnSubmit_Click(object sender, EventArgs e)
    {
      
        _mTSysSet = _bTSysSet.loadConfig(Utils.GetXmlMapPath("Configpath"));
        try
        {
            _mTSysSet.SysName = sysname.Text;
            _mTSysSet.SysKeyWord = syskeyword.Text;
            _mTSysSet.SysHot = syshot.Text;
            _mTSysSet.ICP = icp.Text;
            _mTSysSet.Email = email.Text;
            _mTSysSet.Tel = tel.Text;
            _mTSysSet.Address = address.Text;
            _mTSysSet.WebState = Convert.ToInt32(webstate.SelectedValue);
            _mTSysSet.MainTain = maintain.Text;
            _mTSysSet.PhotoSize = Convert.ToInt32(photosize.Text);
            _mTSysSet.FileSize = Convert.ToInt32(filesize.Text);

            _bTSysSet.saveConifg(_mTSysSet, Utils.GetXmlMapPath("Configpath"));
            JscriptMsg("系統提示:修改系統資訊成功啦!", "sys_config.aspx", "Success");
             
        }
        catch(Exception ex)
        {
            JscriptMsg("系統提示:修改系統資訊失敗啦!", "", "Error");
            
        }
    }

8.總結

配置檔案儲存一些不經常修改的站點資訊,這樣做不用頻繁訪問資料庫去讀取一成不變的資訊,要知道,資料庫連線資源是很寶貴的,頻繁佔用一個連線資源,卻做著一成不變的事情,就是在做無用功,不如把這寶貴的連線資源讓給有用的資料訪問。

9..Net交流會所

歡迎加入.net技術交流群.Net技術交流


相關推薦

.Net利用config檔案儲存資訊

前言:              在做一些專案時,往往會有站點的一些配置資訊需要儲存,比如站點名稱,電話,聯絡人,郵箱這些等等,又因為此資訊不經常更新,而且是單一的,所以放入資料庫中會感覺佔用了不必要的一些資源。所以就會想到這些資訊放入檔案中來儲存。下面是我的一個例子,分

asp.net 利用 js 獲取地址欄參數

.net provide ram UNC color 進行 ref name function 1、aspx頁面,進行頁面跳轉 window.location.href = "ProviderInfo.aspx?ProviderID="+ProviderID; 2、P

淺析C++的開啟檔案儲存檔案(OPENFILENAME)

首先看看msdn上如何描述的: Contains information that the GetOpenFileName and GetSaveFileName functions use to initialize an Open or Save As dialog box

2018/08/03 xml框架主要用儲存資訊,不需要在網頁顯示資訊

XML用來儲存資訊,不需要顯示出來 XML(可擴充套件標記語言)(不需要編譯的語言) XML 好處:其實hml=xml+http4(跨平臺開發,既能寫移動端,也能寫pc) 1.支援跨平臺,各系統; 2.可以自由編寫標籤,可擴充套件性比較好 3.用於儲存資料html5(顯示資料)

【Linux】關於mpiexecconfig檔案可以在提交程式後修改

演算法評測需要跑很多次取均值,因此離不開linux叢集。 叢集上並行執行多次的命令是mpiexec,執行10次的命令是:mpiexec -n 10 -f config nohup python hel

.Net 的反射(檢視基本型別資訊)

反射概述 和Type類 1.反射的作用 簡單來說,反射提供這樣幾個能力:1、檢視和遍歷型別(及其成員)的基本資訊和程式集元資料(metadata);2、遲繫結(Late-Binding)方法和屬性。3、動態建立型別例項(並可以動態呼叫所建立的例項的方法、欄位、屬性)。序

.NetCofnig配置檔案的正規寫法

以下內容以FastSocket為例子 配置節點XML寫法 <configuration> <configSections> <sectio

ASP.NET利用Application和Session統計線上人數、歷史訪問量

          先來簡單說一下ASP.NET中的Application和Session           下圖是我們非常熟悉的Web應用程式的結構:                    在這張圖中,Web伺服器中執行的Web應用程式就是我們所說的Applicati

(轉).net匯入excel檔案顯示進度條

<tr>        <td align="center" style="height: 25px; width: 100px;">父分類</td>        <td valign="middle" style="height: 25px">       

ASP.NET利用DataGrid控制元件顯示圖片以及在圖片和文字上加超連結

資料表:     介面程式碼:                  <asp:DataGrid ID="DataGrid1" runat="server" AutoGenerateColumns="False" BorderWidth="0px"  PageSiz

Spring利用配置檔案和@value注入屬性值

1 簡單屬性值注入 package com.xy.test1; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service;

在.NET利用SQLite ADO.NET使用SQLite資料庫

System.Data.SQLite 是一個原始SQLite的加強版. 它將是一個原版的sqlite3.dll完全替代品 (你甚至就可以把它重新命名為sqlite3.dll). 它不需要連結.NET 執行時,所以可以脫離.NET獨立釋出, 然而它內嵌了一個完整的 ADO.NET 2.0 引擎,為開發提供了

VB.NET操作xml檔案

已知有一個XML檔案(bookstore.xml)如下: <?xml version="1.0" encoding="gb2312"?> <bookstore> <book genre="fantasy" ISBN="2-3631-4">

Asp.netWeb.config連線字串及配置資料庫sqlserver,詳細

近日正在看Asp.net,看到Web.config有很不清楚之處,特意從網路、MSDN蒐集、歸納和整理,供大家分享。在ASP.NET的web.config中,可以用兩種方式來寫連線字串的配置。<configuration> <appSettings&g

ASP.NET利用DataGrid實現高效分頁

ASP.Net中的DataGrid有內建分頁功能, 但是它的預設的分頁方式效率是很低的,特別是在資料量很大的時候,用它內建的分頁功能幾乎是不可能的事,因為它會把所有的資料從資料庫讀出來再進行分頁, 這種只選取了一小部分而丟掉大部分的方法是不可去取的.    在最進的一個專案中

Asp.net 幾種檔案下載方式

C# code ASP.NET檔案下載 //TransmitFile實現下載 protected void Button1_Click(object sender, EventArgs e) { /* 微軟為Response

Spring核心配置檔案載入頭部資訊的兩種方式

1、沒有外掛的情況下:官網拷貝程式碼複製<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

asp.net mdf 資料庫檔案的使用

然後檢視原始碼目錄下的連線字串 <connectionStrings>   <add name="SperConnectionString1" connectionString="Data Source=.\SQLEXPRESS;User ID=sa;pwd=sa;Initial Catal

在ASP.NET實現多檔案上傳

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="MultiFileUpload.aspx.cs"   Inherits="MultiFileUpload"%><!DOCTYPE html PUBLIC "-//W3C//DTD 

Asp.netWeb.config連線字串及配置資料庫sqlserver

近日正在看Asp.net,看到Web.config有很不清楚之處,特意從網路、MSDN蒐集、歸納和整理,供大家分享。 在ASP.NET的web.config中,可以用兩種方式來寫連線字串的配置。 <configuration> <appSettin