ASP.NET MongoDB数据库操作类

来源:互联网 发布:上海招聘seo引擎优化 编辑:程序博客网 时间:2024/06/07 06:42

1、Web.config文件中配置数据库连接信息,如下代码:

<appSettings>    <!--连接MongoDB数据库连接字符串开始-->    <add key="MongoIP" value="192.168.33.162" />    <add key="MongoDatabase" value="ADS5_HNXY" />    <!--MongoDB集群名称,单台MongoDB时请注释掉下面行的配置-->    <!--<add key="ReplicaSetName" value="atrepl"/>-->    <add key="MongoUser" value=""/>    <add key="MongoPassword" value=""/>    <!--连接MongoDB数据库连接字符串结束 --></appSettings>


2、MongoDBHelper操作类,如下代码:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;using MongoDB.Bson;using MongoDB.Driver;using MongoDB.Driver.Builders;using MongoDB.Driver.GridFS;using MongoDB.Driver.Linq;using AT.Business.IDAO;using AT.Business.DAL;using AT_DataShiftService;namespace BAL.DBHelper{    /// <summary>    /// MongoDB数据库操作类    /// </summary>    public class MongoData    {        #region 属性列表        private static string ip = System.Configuration.ConfigurationManager.AppSettings["MongoIP"];        private static string dbname = System.Configuration.ConfigurationManager.AppSettings["MongoDatabase"];        private static string user = System.Configuration.ConfigurationManager.AppSettings["MongoUser"];        private static string pwd = System.Configuration.ConfigurationManager.AppSettings["MongoPassword"];        private static string myReplicaSetName = System.Configuration.ConfigurationManager.AppSettings["ReplicaSetName"];        private static ReadPreference myReadPreference = ReadPreference.SecondaryPreferred;        //两个不同的表名        private const string _ADS5 = "ads5";        private const string _POWERPARAMETERS = "PowerParameters";        private static AT_System_IDAO systemidao = new AT_System_Dal();        #endregion        #region MongoDB权限认证        /// <summary>        ///  MongoDB权限认证        /// </summary>        /// <returns></returns>        public static MongoDatabase getDatabase()        {            MongoClientSettings setting = new MongoClientSettings();            if (!string.IsNullOrEmpty(user) && !string.IsNullOrEmpty(pwd))            {                //Logger.Log.Info("MongoDB开启权限访问 " + user + ":" + pwd);                List<MongoCredential> lstCredential = new List<MongoCredential>();                lstCredential.Add(MongoCredential.CreateCredential(dbname, user, pwd));                setting.Credentials = lstCredential;            }            setting.Server = new MongoServerAddress(ip);            if (!string.IsNullOrEmpty(myReplicaSetName))            {                //Logger.Log.Info("MongoDB开启集群模式 " + myReplicaSetName);                setting.ConnectionMode = ConnectionMode.ReplicaSet;                setting.ReplicaSetName = myReplicaSetName;                setting.ReadPreference = myReadPreference;            }            //MongoClient client = new MongoClient(QJBL.MongoDBConn);            var client = new MongoClient(setting);            MongoServer server = client.GetServer();            MongoDatabase database = server.GetDatabase(dbname);            return database;        }        #endregion        #region 获取MySQL中对应表具列表信息 2017-05-17        /// <summary>        ///  获取MySQL中对应表具列表信息        /// </summary>        /// <returns></returns>        public static DataTable GetMeterList()        {            return systemidao.GetMeterList();        }        #endregion        #region 获取每个整点需要上传的表具读数 2017-05-17        /// <summary>        /// 获取每个整点需要上传的表具读数        /// </summary>        /// <param name="datetime"></param>        /// <returns></returns>        public static DataTable AT_Up_EnergyValue4WJW(string datetime)        {            DataTable dt = GetMeterList();            DataTable newDT = new DataTable();            newDT.Columns.Add("BuildID", typeof(string));            newDT.Columns.Add("CollectionID", typeof(string));            newDT.Columns.Add("MeterID", typeof(string));            newDT.Columns.Add("EnergyValue", typeof(double));            foreach (DataRowView drv in dt.DefaultView)            {                DataRow row = newDT.NewRow();                if (drv["F_MeasureClassify"].ToString() == "04" || drv["F_MeasureClassify"].ToString() == "14")                {                    //从MongoDB中的PowerParameters中取数                    row["BuildID"] = drv["BuildID"].ToString();                    row["CollectionID"] = drv["CollectionID"].ToString();                    row["MeterID"] = drv["MeterID"].ToString();                    double rawValue = GetDataFromPowerParameters(drv["F_MeterID"].ToString(), DateTime.Parse(datetime), drv["F_ValueType"].ToString());                    //这里去除的可能是负数,要做绝对值转换                    double absValue = Math.Abs(rawValue);                    row["EnergyValue"] = double.Parse(drv["F_Ratio"].ToString()) * absValue * 0.0036;                    WriteLog(drv["F_MeterID"].ToString() + "\t" + datetime + "\t" + (double.Parse(drv["F_Ratio"].ToString()) * absValue * 0.0036) + "\r");                    newDT.Rows.Add(row);                }                else                {                    //从MongoDB中的ADS5中取数                    row["BuildID"] = drv["BuildID"].ToString();                    row["CollectionID"] = drv["CollectionID"].ToString();                    row["MeterID"] = drv["MeterID"].ToString();                    double rawValue = GetDataFromADS5(drv["F_TagName"].ToString(), DateTime.Parse(datetime));                    double absValue = Math.Abs(rawValue);                    row["EnergyValue"] = double.Parse(drv["F_Ratio"].ToString()) * absValue;                    WriteLog(drv["F_TagName"].ToString() + "\t" + datetime + "\t" + double.Parse(drv["F_Ratio"].ToString()) * absValue + "\r");                    newDT.Rows.Add(row);                }            }            return newDT;        }        #endregion        #region 当F_MeasureClassify不为‘04’和‘14’时,从ADS5表中获取表头示数 2017-08-03        /// <summary>        /// F_CaclType = 0 ,从ADS5表中获取数据        /// </summary>        /// <param name="TagName"></param>        /// <param name="DateTime"></param>        /// <returns></returns>        public static double GetDataFromADS5(string TagName, DateTime DateTime)        {            MongoDatabase db = MongoData.getDatabase();            //获得Users集合,如果数据库中没有,先新建一个            MongoCollection col = db.GetCollection(_ADS5);            var query = Query.And(            Query.EQ("TagName", TagName),            Query.EQ("DateTime", DateTime)            );            List<BsonDocument> documents = col.FindAs<BsonDocument>(query).ToList();            //做异常处理            if (documents.Count != 0)            {                BsonElement element = documents[0].GetElement("Value");                return double.Parse(element.Value.ToString());            }            else            {                //直至可以获取到上一个有数据的时刻 2017-08-03                int index = 0;                do                {                    index++;                    DateTime NewDateTime = DateTime.AddHours(-1 * index);                    query = Query.And(                        Query.EQ("TagName", TagName),                        Query.EQ("DateTime", NewDateTime)                     );                    documents = col.FindAs<BsonDocument>(query).ToList();                } while (documents.Count == 0);                BsonElement element = documents[0].GetElement("Value");                return double.Parse(element.Value.ToString());            }        }        #endregion        #region 当F_MeasureClassify为‘04’或‘14’时,从PowerParameters表中获取表头示数 2017-08-03        /// <summary>        /// 从PowerParameters表中获取数据        /// </summary>        /// <param name="TagName"></param>        /// <param name="DateTime"></param>        /// <returns></returns>        public static double GetDataFromPowerParameters(string MeterID, DateTime DateTime, string ValueType)        {            MongoDatabase db = MongoData.getDatabase();            //获得Users集合,如果数据库中没有,先新建一个            MongoCollection col = db.GetCollection(_POWERPARAMETERS);            var query = Query.And(             Query.EQ("MeterID", MeterID),             Query.EQ("DateTime", DateTime)             );            List<BsonDocument> documents = col.FindAs<BsonDocument>(query).ToList();            //做异常处理            if (documents.Count != 0)            {                BsonElement element = documents[0].GetElement(ValueType);                return double.Parse(element.Value.ToString());            }            else            {                //直至可以获取到上一个有数据的时刻 2017-08-03                int index = 0;                do                {                    index ++;                    DateTime NewDateTime = DateTime.AddHours(-1 * index);                    query = Query.And(                         Query.EQ("MeterID", MeterID),                         Query.EQ("DateTime", NewDateTime)                    );                    documents = col.FindAs<BsonDocument>(query).ToList();                } while (documents.Count == 0);                BsonElement element = documents[0].GetElement(ValueType);                return double.Parse(element.Value.ToString());            }        }        #endregion        #region 日志记录        /// <summary>        ///         /// </summary>        /// <param name="log"></param>        public static void WriteLog(string log)        {            string spath1 = System.AppDomain.CurrentDomain.BaseDirectory + @"\GetInterupt.Log";            string spath = System.AppDomain.CurrentDomain.BaseDirectory + @"\" + DateTime.Now.ToString("yyyy") + @"\GetInterupt" + DateTime.Now.ToString("MM") + ".Log";            if (!FileC.IsExistFile(spath))            {                FileC.CreateDirectory(FileC.GetDirectoryName(spath));                FileC.CreateFile(spath);                FileC.WriteText(spath1, "");            }            FileC.AppendText(spath, log + "\r\n");            FileC.AppendText(spath1, log + "\r\n");        }        #endregion    }}



    

原创粉丝点击