【WPF】access数据库操作

这段代码展示了如何使用C#进行Access数据库的操作,包括添加、获取、更新和删除记录。`CQServices`类提供了数据库查询服务,如添加一条记录到`HeatDataSheet`表,获取所有记录,根据SQL获取记录等。`DBHelp`类负责数据库连接和管理,包括创建数据库、打开连接、执行SQL命令等,并实现了批量插入数据的功能。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值