c#---通过xml读取数据库

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012319493/article/details/50760137

SectorList 是自己写的类

xml.cs

using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Collections;

namespace Xml
{
    //使用模板方法Template Method Pattern
    public class XML : IDisposable
    {
        private string configFilePath;  //Debug目录
        private XmlDocument xmlDoc;

        public XmlDocument XmlDoc
        {
            get { return xmlDoc; }
            set { xmlDoc = value; }
        }

        public XML(string cFPath)
        {
            this.configFilePath = cFPath;
            xmlDoc = new XmlDocument();
            xmlDoc.Load(this.configFilePath);
        }

        public void Dispose()
        {
            xmlDoc = null;
        }

        /***获取数据库配置信息*/
        public bool getDBInfo(string ndname, out string dbname, out string server, out string user, out string password)
        {
            bool result = true;
            dbname = "";
            server = "";
            user = "";
            password = "";

            XmlNodeList xnList = xmlDoc.SelectSingleNode(ndname).ChildNodes;
            foreach (XmlNode node in xnList)
            {
                if (node.Name == "dbName")
                    dbname = node.InnerText.Trim();
                if (node.Name == "server")
                    server = node.InnerText.Trim();
                if (node.Name == "user")
                    user = node.InnerText.Trim();
                if (node.Name == "password")
                    password = node.InnerText.Trim();
            }
            if (dbname == "" || server == "" || user == "" || password == "") result = false;
            return result;
        }

        /*获取Sql语句*/
        public bool getSqlCommand(string ndname, out string sqlcommand)
        {
            return getString(ndname, out sqlcommand);
        }

        public bool getString(string ndname, out string outstring)
        {
            bool result = true;
            outstring = "";
            XmlNode xn = xmlDoc.SelectSingleNode(ndname);
            outstring = xn.InnerText;
            if (outstring == "")
                result = false;
            return result;
        }

        public bool setItemInnerText(string ndname, string text)
        {
            bool result = true;
            try
            {
                XmlElement node = (XmlElement)xmlDoc.SelectSingleNode(ndname);
                node.InnerText = text;
                xmlDoc.Save(configFilePath);
            }
            catch (Exception e)
            {
                result = false;
                return result;
            }
            return result;
        }
    }

}

db.cs

using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
using System.Collections;
using System.Data;
using Xml;

namespace DataBase
{
    public class DB
    {
        private string xmlNode;
        public DB(string xn)
        {
            xmlNode = xn;
        }
        private string dbname;
        private string server;
        private string user;
        private string pwd;

        private SqlConnection conn;

        /*初始化DataBase:从配置文件获取DataBase的配置信息*/
        public bool initialize(XML xml)
        {
            bool result = true;
            try
            {
                result = xml.getDBInfo(xmlNode, out this.dbname, out this.server, out this.user, out this.pwd);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                result = false;
            }
            return result;
        }

        /*根据数据库的配置信息,构造连接字符串*/
        public string constructConnectionString()
        {
            string connStr = "";
            try
            {
                if (server == "localhost" && user == "null" && pwd == "null")
                    connStr = "data source=(local);integrated security=SSPI;initial catalog=" + dbname + ";Max Pool Size = 1024";
                else if (server != "localhost" && user == "null" && pwd == "null")
                    connStr = "data source=" + server + ";integrated security=SSPI;initial catalog=" + dbname + ";Max Pool Size = 1024";
                else if (server == "localhost" && user != "null" && pwd != "null")
                    connStr = "data source=(local);user id=" + user + ";password =" + pwd + ";initial catalog=" + dbname + ";Max Pool Size = 1024";
                else if (server != "localhost" && user != "null" && pwd != "null")
                    connStr = "data source=" + server + ";user id=" + user + ";password =" + pwd + ";initial catalog=" + dbname + ";Max Pool Size = 1024";

                return connStr;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return null;
            }
        }

        /*连接数据库,返回SqlConnection*/
        public SqlConnection GetConnection()
        {
            try
            {
                string connStr = constructConnectionString();
                conn = new SqlConnection(connStr);
                conn.Open();
                return conn;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                throw e;
            }
        }

        /*选择操作,返回SqlDataReader*/
        public SqlDataReader selectR(string sqlSelect)
        {
            try
            {
                SqlCommand cmd = new SqlCommand();
                cmd.CommandText = sqlSelect;
                cmd.CommandTimeout = 5000000;
                cmd.Connection = conn;
                SqlDataReader reader = cmd.ExecuteReader();
                return reader;
            }
            catch (SqlException e)
            {
                Console.WriteLine(e.Message);
                return null;
            }
        }

        //这里需要考虑selectR()返回的为null的情况
        public bool selectS(string sqlSelect, out string result)
        {
            SqlDataReader reader = selectR(sqlSelect);
            result = "";
            bool flag = false;

            if (reader.Read())
            {
                if (reader.IsDBNull(0) != true)
                {
                    result = System.Convert.ToString(reader.GetValue(0));
                    flag = true;
                }
                else
                    result = "null";
            }
            reader.Close();
            return flag;
        }

        public bool insert(string sqlInsert)
        {
            try
            {
                SqlCommand cmd = new SqlCommand();
                cmd.CommandText = sqlInsert;
                cmd.CommandTimeout = 5000000;
                cmd.Connection = conn;
                cmd.ExecuteNonQuery();
                cmd.Dispose();
                return true;
            }
            catch (SqlException e)
            {
                Console.WriteLine(e.Message);
                return false;
            }
        }

        /*关闭数据库连接*/
        public void close()
        {
            try
            {
                conn.Close();
                conn.Dispose();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                throw e;
            }
        }
    }
}

应用—EA.cs

        //数据的预处理
        private void prepareData(string configFile)
        {
            XML xml = new XML(configFile);
            DB db = new DB("Configuration/Database");
            try
            {
                #region ;从 配置文件 获取 数据库配置信息 ;并连接数据库
                if (db.initialize(xml) == false)
                {
                    Console.WriteLine("初始化配置文件错误!");
                    return;
                }
                if (db.GetConnection() == null)
                {
                    Console.WriteLine("连接数据库错误!");
                    return;
                }
                #endregion

                sList = new SectorList("Configuration/SqlInitSectorInfoTest37900");

                #region ;从 配置文件 获取 小区列表 各项信息;
                if (sList.initializeSectorInfo(db, xml) == false)
                    return;
                #endregion

            }
            catch (Exception e)
            {
                Console.WriteLine("PREPARE ERR: {0}!", e.Message);
            }
            finally
            {
                db.close();
                xml.Dispose();
            }
        }

EA.cs中的调用:DataPre.cs

/* 小区集合信息类 */
    public class SectorList
    {
        public List<Sector> sectorList;//小区个体对象数组
        public double[,] InterfMatrix;//小区间干扰信息矩阵

        #region XML文件属性
        private string xmlNodeSectorInfo;//初始化小区信息
        #endregion

        public SectorList(string xnSectorInfo)
        {
            xmlNodeSectorInfo = xnSectorInfo;
            sectorList = new List<Sector>();
        }

        /*从 数据库 获取 小区基础信息, 并创建 小区对象数组*/
        private bool initializeSectorInfo(DB db, XML xml)
        {
            string sqlInitSectorInfo;
            xml.getSqlCommand(xmlNodeSectorInfo, out sqlInitSectorInfo);

            SqlDataReader reader;
            reader = db.selectR(sqlInitSectorInfo);
            while (reader.Read())
            {
                if (reader.GetDouble(3) - 0 < 1e-7 || reader.GetDouble(4) - 0 < 1e-7 || reader.GetString(5).Length == 0)
                    continue;
                Sector cell = new Sector(reader.GetString(0), reader.GetInt32(1), reader.GetInt32(2), reader.GetDouble(3), reader.GetDouble(4), reader.GetString(5));
                cell.FCN = reader.GetInt32(6);
                sectorList.Add(cell);
            }
            reader.Close();

            return sectorList.Count() > 0 ? true : false;
        }
    }

PCIAllocationConfig_KM_0917.xml

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

    <Database>
        <dbName>PCIOptimize_yf_0122</dbName>
        <server>localhost</server>
        <user>null</user>
        <password>null</password>
    </Database>

<SqlInitSectorInfoTest37900>
    select distinct      tbCell.SECTOR_ID,ENODEBID,PHYCELLID,tbCell.LONGITUDE,tbCell.LATITUDE,tbCell.STYLE ,tbCell.EARFCN
    from tbCell 
    where tbCell.LONGITUDE !=0 and tbCell.LONGITUDE !=0 and
    SECTOR_ID in
   (select sector_id from tbCell37900)
</SqlInitSectorInfoTest37900>

</Configuration>
展开阅读全文

没有更多推荐了,返回首页