一、access数据库操作类
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.OleDb;
//using Microsoft.Office.Interop;
//using Excel = Microsoft.Office.Interop.Excel;
using System.IO;
namespace NormalizingApp.DataBase
{
public class CQServices //数据库查询 添加 删除等服务
{
#region 添加数据记录
/// <summary>
/// 添加一条记录
/// </summary>
/// <param name="record">数据记录属性</param>
/// <returns></returns>
public static int AddHeatRecords(Models.DataBaseRecord record)
{
string sql = "insert into [HeatDataSheet]([serialNumber],[operatorName],[jobNumber],[voltage],[current],[power],[frequency],[energy],[temperature1],[temperature2],[temperature3],[temperature4],[flow1],[flow2],[flow3],[pressure],[heatTime],[coolingTime])";
sql += "values (@serialNumber,@operatorName,@jobNumber,@voltage,@current,@power,@frequency,@energy,@temperature1,@temperature2,@temperature3,@temperature4,@flow1,@flow2,@flow3,@pressure,@heatTime,@coolingTime)";
OleDbParameter[] para = new OleDbParameter[]
{
new OleDbParameter("@serialNumber",string.IsNullOrEmpty(record.serialNumber) ? "" : record.serialNumber),
new OleDbParameter("@operatorName",string.IsNullOrEmpty(record.operatorName) ? "" : record.operatorName),
new OleDbParameter("@jobNumber",string.IsNullOrEmpty(record.jobNumber) ? "" : record.jobNumber),
new OleDbParameter("@voltage",string.IsNullOrEmpty(record.voltage) ? "" : record.voltage),
new OleDbParameter("@current",string.IsNullOrEmpty(record.current) ? "" : record.current),
new OleDbParameter("@power",string.IsNullOrEmpty(record.power) ? "" : record.power),
new OleDbParameter("@frequency",string.IsNullOrEmpty(record.frequency) ? "" : record.frequency),
new OleDbParameter("@energy",string.IsNullOrEmpty(record.energy) ? "" : record.energy),
new OleDbParameter("@temperature1",string.IsNullOrEmpty(record.temperature1) ? "" : record.temperature1),
new OleDbParameter("@temperature2",string.IsNullOrEmpty(record.temperature2) ? "" : record.temperature2),
new OleDbParameter("@temperature3",string.IsNullOrEmpty(record.temperature3) ? "" : record.temperature3),
new OleDbParameter("@temperature4",string.IsNullOrEmpty(record.temperature4) ? "" : record.temperature4),
new OleDbParameter("@flow1",string.IsNullOrEmpty(record.flow1) ? "" : record.flow1),
new OleDbParameter("@flow2",string.IsNullOrEmpty(record.flow2) ? "" : record.flow2),
new OleDbParameter("@flow3",string.IsNullOrEmpty(record.flow3) ? "" : record.flow3),
new OleDbParameter("@pressure",string.IsNullOrEmpty(record.pressure) ? "" : record.pressure),
new OleDbParameter("@heatTime",string.IsNullOrEmpty(record.heatTime.ToString()) ? "" : record.heatTime.ToString()),
new OleDbParameter("@coolingTime",string.IsNullOrEmpty(record.coolingTime.ToString()) ? "" : record.coolingTime.ToString()),
};
return DBHelp.ExecuteCommand(sql, para);
}
#endregion
#region 获取数据所有记录
/// <summary>
/// 获取数据所有记录
/// </summary>
/// <returns></returns>
public static List<Models. DataBaseRecord> GetAllRecords()
{
string sqlAll = "select * from [DataSheet]";
return GetRecordBySql(sqlAll);
}
#endregion
/// <summary>
/// 根据SQL语句查询一条记录
/// </summary>
/// <param name="safeSql"></param>
/// <returns></returns>
public static List<string> GetRecordSql(string safeSql)
{
List<string> list = new List<string>();
list.Clear();
try
{
DataSet ds = DBHelp.GetDataSet(safeSql);
if (ds == null) return list;
foreach (DataRow row in ds.Tables[0].Rows)
{
list.Add(row[0].ToString());
}
return list;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
throw;
}
}
#region 根据SQL语句查询所有的记录
/// <summary>
/// 根据SQL语句查询所有的记录
/// </summary>
/// <param name="safeSql">SQL语句</param>
/// <returns></returns>
public static List<Models.DataBaseRecord> GetRecordBySql(string safeSql)
{
List<Models.DataBaseRecord> list = new List<Models.DataBaseRecord>();
list.Clear();
try
{
DataSet ds = DBHelp.GetDataSet(safeSql);
if (ds == null) return list;
foreach (DataRow row in ds.Tables[0].Rows)
{
Models.DataBaseRecord record = new Models.DataBaseRecord();//实例化一条记录
record.serialNumber = row["serialNumber"].ToString();
record.operatorName = row["operatorName"].ToString();
record.jobNumber = row["jobNumber"].ToString();
record.voltage = row["voltage"].ToString();
record.current = row["current"].ToString();
record.power = row["power"].ToString();
record.frequency = row["frequency"].ToString();
record.energy = row["energy"].ToString();
record.temperature1 = row["temperature1"].ToString();
record.temperature2 = row["temperature2"].ToString();
record.temperature3 = row["temperature3"].ToString();
record.temperature4 = row["temperature4"].ToString();
record.flow1 = row["flow1"].ToString();
record.flow2 = row["flow2"].ToString();
record.flow3 = row["flow3"].ToString();
record.pressure = row["pressure"].ToString();
record.heatTime = row["heatTime"].ToString();
record.coolingTime = row["coolingTime"].ToString();
list.Add(record);//添加到记录列表
}
return list;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
throw;
}
}
#endregion
#region 更新一条检测记录
/// <summary>
/// 更新一条检测记录
/// </summary>
/// <param name="record">数据记录属性</param>
/// <returns></returns>
public static bool UpdateKJRecordByNO(Models.DataBaseRecord record)
{
try
{
//string sql = "update [DataSheet] set ";
//sql += "[kjh]='" + record.kjh + "'";
//sql += " where [qh]=" + "'" + record.qh + "'";
//DBHelp.ExecuteCommand(sql);
return true;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
throw;
}
}
#endregion
#region 删除指定记录
/// <summary>
/// 删除指定记录
/// </summary>
/// <returns></returns>
public static bool DeleteRecord(string str)
{
try
{
//string sql = "delete from [DataSheet] ";//删除整个表
string sql = @"DELETE DataSheet.serialNumber FROM DataSheet WHERE(((DataSheet.serialNumber) = '" + str + @"'))";
DBHelp.ExecuteCommand(sql);
return true;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
throw;
}
}
#endregion
#region Access大数据插入
/// <summary>
/// Access大数据插入
/// </summary>
/// <param name="sList"></param>
public static void BulckInsert(List<Models.DataBaseRecord> sList)
{
DBHelp.add(sList);
}
#endregion
}
}
二、 access数据库连接类
using System;
using System.Collections.Generic;
using System.Text;
using ADOX;
using System.Data;
using System.Data.OleDb;
using System.Configuration;
using DAO = Microsoft.Office.Interop.Access.Dao;
using System.IO;
namespace NormalizingApp.DataBase
{
public class DBHelp //数据库辅助类
{
private static OleDbConnection connection;
//access数据库 每天都复制模板创建新数据库
public static string fileName = @"..\..\Data\WorkData\" + ViewModels.LoginWindowViewModel.productNumber.AccessDate.Date.ToString("yyyy") +
@"\" + ViewModels.LoginWindowViewModel.productNumber.AccessDate.Date.ToString("yyyyMM") +
@"\" + ViewModels.LoginWindowViewModel.productNumber.AccessDate.Date.ToString("yyyyMMdd") + ".accdb";
private static string fileNameTemplate = @"..\..\Data\AccessTemplate\Template.accdb";//数据库模板 路径
public static string FileName { get; set; }
/// <summary>
/// 创建工作数据目录和数据库
/// </summary>
public static bool CreteFilesName()
{
if(!Directory.Exists(Path.GetDirectoryName(FileName)))//目录不存在
{
try
{
Directory.CreateDirectory(Path.GetDirectoryName(FileName));//创建目录
if (CopyAccessDB()) //复制数据库模板文件
return true;
else
return false;
}
catch
{
return false;
}
}
else//目录存在,直接复制数据库模板
{
try
{
if (CopyAccessDB())
return true;
else
return false;
}
catch
{
return false;
}
}
}
/// <summary>
/// 复制且重命名数据库到工作目录下
/// </summary>
public static bool CopyAccessDB()
{
try
{
//判断路径是否存在,若不存在就创建
if (!Directory.Exists(Path.GetDirectoryName(fileNameTemplate)))//模板目录不存在
{
Directory.CreateDirectory(Path.GetDirectoryName(fileNameTemplate));//创建模板数据库所在目录
}
//判断文件是否存在
if (File.Exists(fileNameTemplate))
{
if(!File.Exists(FileName))//模板存在
{
File.Copy(fileNameTemplate, FileName);//复制模板数据库文件
return true;
}
else return true;
}
else return false; //模板不存在
}
catch
{
return false;
}
}
/// <summary>
/// 创建ACCESS数据文件
/// </summary>
/// <returns></returns>
public static bool CreateDB() //创建access数据库
{
////创建数据库
string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data source =" + FileName; //accdb 数据库
Catalog catalog = new Catalog();//ADOX 目录
try
{
if(!File.Exists(FileName))//数据库不存在
catalog.Create(connectionString); //创建ACE数据库文件
else
return true;
}
catch
{
return false;
}
return true;
}
/// <summary>
/// 数据库连接属性
/// </summary>
public static OleDbConnection Connection //返回oledb连接对象
{
//string strPath = Application.StartupPath;
//int x = strPath.IndexOf("bin");
//strPath = strPath.Substring(0, x-1);
//strPath += filename;
get
{
//string connectionString = "Provider=Microsoft.Jet.OleDb.4.0;Data source=" + FileName; //mdb 数据库
string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data source =" + FileName; //accdb 数据库
if (connection == null)//连接 为空
{
connection = new OleDbConnection(connectionString);
connection.Open();
}
else if (connection.State == ConnectionState.Closed)//连接 关闭
{
connection.Open();
}
else if (connection.State == ConnectionState.Broken)//连接中断
{
connection.Close();
connection.Open();
}
else if (connection.State == ConnectionState.Open) //更改新的连接。断开后重新连接
{
connection.Close();
connection = null;
connection = new OleDbConnection(connectionString);
connection.Open();
}
return connection;
}
}
//ExecuteCommand sql语句方法
public static int ExecuteCommand(string safeSql)
{
OleDbCommand cmd = new OleDbCommand(safeSql, Connection);
int result = cmd.ExecuteNonQuery();
return result;
}
//ExecuteCommand sql语句方法+参数形式
public static int ExecuteCommand(string sql, params OleDbParameter[] values)
{
OleDbCommand cmd = new OleDbCommand(sql, Connection);
cmd.Parameters.AddRange(values);
return cmd.ExecuteNonQuery();
}
//GetReader sql语句方法
public static OleDbDataReader GetReader(string safeSql)
{
OleDbCommand cmd = new OleDbCommand(safeSql, Connection);
OleDbDataReader reader = cmd.ExecuteReader();
return reader;
}
//GetReader sql语句方法+参数形式
public static OleDbDataReader GetReader(string sql, params OleDbParameter[] values)
{
OleDbCommand cmd = new OleDbCommand(sql, Connection);
cmd.Parameters.AddRange(values);
OleDbDataReader reader = cmd.ExecuteReader();
return reader;
}
//GetDataSet sql语句方法
public static DataSet GetDataSet(string safesql)
{
DataSet ds = new DataSet();
OleDbCommand cmd = new OleDbCommand(safesql, Connection);
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
da.Fill(ds);
return ds;
}
/// <summary>
/// 获取数据库所有表名
/// </summary>
/// <returns></returns>
public static List<string> GetAllTableName()
{
List<string> tableName = new List<string>();
try
{
//判断文件是否存在
if (File.Exists(FileName))
{
if (Connection.State == ConnectionState.Closed)
Connection.Open();
DataTable dt = Connection.GetSchema("Tables");//获取所有数据表的信息
foreach (DataRow row in dt.Rows)
{
if (row[3].ToString() == "TABLE")
tableName.Add(row[2].ToString());
}
}
return tableName;
}
catch
{
Connection.Close();
return tableName;
}
}
#region 创建数据表格和固定字段
/// <summary>
/// 创建数据表格和固定字段
/// </summary>
/// <returns></returns>
public static bool CreateSheetData(string tableName) //在数据表中创建 表头
{
try
{
OleDbCommand cmdStr = new OleDbCommand();
cmdStr.Connection = Connection;
cmdStr.CommandText = @"create table " + tableName + " (ID int IDENTITY (1,1) primary key, 焊缝编号 text, 操作员 text, 工号 text, 加热时间 text, 电压 text," +
"电流 text, 功率 text, 能量 text, 轨顶温度 text, 轨脚温度 text, 内轨脚温度 text, 喷风时间 text, 喷风温度 text, 轨顶流量 text, 轨腰流量 text, 轨底流量 text," +
"喷风压力 text)";
cmdStr.ExecuteNonQuery();//执行sql请求 创建表
Connection.Close();
return true;
}
catch
{
Connection.Close();
return false;
}
}
#endregion
#region 数据批量插入到数据库
/// <summary>
/// 数据批量插入到数据库
/// </summary>
/// <param name = "sList" ></ param >
public static void add(List<Models.DataBaseRecord> sList)
{
DAO.DBEngine dbEngine = new DAO.DBEngine();//初始化数据库引擎
DAO.Database db = dbEngine.OpenDatabase(FileName);//打开数据库
DAO.Recordset rs = db.OpenRecordset("DataSheet");//打开表
DAO.Field[] myFields = new DAO.Field[18];//字段集合
myFields[0] = rs.Fields["serialNumber"];
myFields[1] = rs.Fields["operatorName"];
myFields[2] = rs.Fields["jobNumber"];
myFields[3] = rs.Fields["voltage"];
myFields[4] = rs.Fields["current"];
myFields[5] = rs.Fields["power"];
myFields[6] = rs.Fields["frequency"];
myFields[7] = rs.Fields["energy"];
myFields[8] = rs.Fields["temperature1"];
myFields[9] = rs.Fields["temperature2"];
myFields[10] = rs.Fields["temperature3"];
myFields[11] = rs.Fields["temperature4"];
myFields[12] = rs.Fields["flow1"];
myFields[13] = rs.Fields["flow2"];
myFields[14] = rs.Fields["flow3"];
myFields[15] = rs.Fields["pressure"];
myFields[16] = rs.Fields["heatTime"];
myFields[17] = rs.Fields["coolingTime"];
for (int i = 0; i < sList.Count; i++)
{
rs.AddNew();//添加新行
myFields[0].Value = sList[i].serialNumber;
myFields[1].Value = sList[i].operatorName;
myFields[2].Value = sList[i].jobNumber;
myFields[3].Value = sList[i].voltage;
myFields[4].Value = sList[i].current;
myFields[5].Value = sList[i].power;
myFields[6].Value = sList[i].frequency;
myFields[7].Value = sList[i].energy;
myFields[8].Value = sList[i].temperature1;
myFields[9].Value = sList[i].temperature2;
myFields[10].Value = sList[i].temperature3;
myFields[11].Value = sList[i].temperature4;
myFields[12].Value = sList[i].flow1;
myFields[13].Value = sList[i].flow2;
myFields[14].Value = sList[i].flow3;
myFields[15].Value = sList[i].pressure;
myFields[16].Value = sList[i].heatTime;
myFields[17].Value = sList[i].coolingTime;
rs.Update();
}
rs.Close();
db.Close();
}
#endregion
}
}