//using FLY.FeedbackRenZiJia.Common; using System; using System.Collections.Generic; using System.Data; using System.Data.SQLite; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using MathNet.Numerics.Statistics; using System.Diagnostics; namespace FLY.HeatingHelper { public class DBHeatDataHelper { string db_name; Model.Model_HeatData db; public DBHeatDataHelper(string dbName) { db_name = dbName; } public class Temp { } public int CalculateFields() { using (db=new Model.Model_HeatData(db_name)) { } return -1; } /// /// 把TableName中的 /// /// /// public static int TransformDateTime(string DBPath, string TableName, string[] columns) { if (!File.Exists(DBPath)) return -1; string connString = string.Format("Data Source = {0}; Version = 3;", DBPath); int cnt = columns.Count(); if (cnt < 1) return -2; string colString = columns[0]; for (int i = 1; i < cnt; i++) { colString = colString + "," + columns[i]; } string selectCommand = string.Format(@"select 结束时间,{0} from [{1}]", colString, TableName); SQLiteDataAdapter dbData = new SQLiteDataAdapter(selectCommand, connString); DataSet ds = new DataSet(); SQLiteCommandBuilder builder = new SQLiteCommandBuilder(dbData); dbData.Fill(ds); //dbData.AcceptChangesDuringUpdate = true; int rcnt = 0; bool ischanged = false; foreach (DataRow dr in ds.Tables[0].Rows) { ischanged = false; foreach (string col in columns) { if (dr[col].ToString().Contains(@"/")) { DateTime dt = DateTime.Parse(dr[col].ToString()); string tmp = dt.ToString("yyyy-MM-dd HH:mm:ss"); dr.SetField(col, tmp); ischanged = true; } } if (!ischanged) continue; if (rcnt++ >= 400) { dbData.Update(ds); ds.AcceptChanges(); rcnt = 0; } } dbData.Update(ds); ds.AcceptChanges(); return 0; } /// /// 计算HeatData表中厚度均值和2sigma的值以及加热极差的值 /// /// /// /// public static int CalculateFields(string DBPath, string TableName) { if (!File.Exists(DBPath)) return -1; string connString = string.Format("Data Source = {0}; Version = 3;", DBPath); SQLiteDataAdapter dbDataAdapter = new SQLiteDataAdapter(string.Format("select * from [{0}]", TableName), connString); SQLiteCommandBuilder cb = new SQLiteCommandBuilder(dbDataAdapter); //dbDataAdapter.AcceptChangesDuringUpdate = true; DataSet dataSet = new DataSet(); dbDataAdapter.Fill(dataSet); List thickness = new List(); List heatrange = new List(); int c = 0; foreach (DataRow data in dataSet.Tables[0].Rows) { Stopwatch watch = new Stopwatch(); watch.Start(); int i; i = 1; thickness.Clear(); while(true) { string fieldName = "厚度" + i++; double tmp; try { tmp = data.Field(fieldName); } catch { break; } thickness.Add(tmp); } Tuple result = Statistics.MeanStandardDeviation(thickness); data.SetField("厚度均值", result.Item1); data.SetField("SIGMA2", result.Item2 * 2); thickness.Clear(); i = 1; while (true) { string fieldName = "加热" + i++; int tmp; try { tmp = data.Field(fieldName); } catch { break; } thickness.Add(tmp); } var range = Statistics.Maximum(thickness) - Statistics.Minimum(thickness); data.SetField("加热极差", (int)Math.Round(range + 0.5)); watch.Stop(); c++; } dbDataAdapter.Update(dataSet); dataSet.AcceptChanges(); //SQLiteConnection conn = new SQLiteConnection(connString); //conn.Open(); //IDbCommand cmd = new SQLiteCommand(conn); //cmd.CommandText = string.Format("select * from [{0}]", TableName); //DataTable schemaTable; //using (IDataReader reader = cmd.ExecuteReader(CommandBehavior.KeyInfo)) //{ // schemaTable = reader.GetSchemaTable(); //} //int idx = 0; //conn.Close(); //if (idx >= schemaTable.Rows.Count) return -1; return 0; } } }