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 } }