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