Newer
Older
BRServer / BRServer.DAL / Alarm.cs
root on 14 Mar 2019 5 KB version 1.0
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data.MySqlClient;

namespace BRServer.DAL
{
    public class Alarm : IDAL.IAlarm
    {
        public static readonly string ConnectionStringOrderDistributedTransaction =
            System.Configuration.ConfigurationManager.AppSettings["MySqlConnString"];

        // Static constants
        private const string TABLE_NAME = "BRCJ_ALARM";

        private const string COLUMN_DEVCODE = "DEVCODE";
        private const string COLUMN_LOGTIME = "LOGTIME";
        private const string COLUMN_MESSAGE = "MESSAGE";

        private const string PARM_DEVCODE = "@DEVCODE";
        private const string PARM_LOGTIME = "@LOGTIME";
        private const string PARM_MESSAGE = "@MESSAGE";

        private const string SQL_INSERT_ALARM = "INSERT INTO " + TABLE_NAME
                        + " (" + COLUMN_DEVCODE + ","
                        + " " + COLUMN_LOGTIME + ","
                        + " " + COLUMN_MESSAGE + ")"
                        + " VALUES "
                        + " (" + PARM_DEVCODE + ","
                        + " " + PARM_LOGTIME + ","
                        + " " + PARM_MESSAGE + ")";

        
        public void insert(Model.Alarm alarm)
        {
            MySqlTransaction tran = null;
            using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction))
            {
                try
                {
                    conn.Open();
                    tran = conn.BeginTransaction();

                    if (string.IsNullOrEmpty(alarm.DEVCODE))
                    {
                        throw new Exception("设备ID为空!");
                    }

                    MySqlParameter[] parms = GetAdapterParameters();
                    SetAdapterParameters(parms, alarm);

                    MySqlCommand cmd = new MySqlCommand(SQL_INSERT_ALARM, conn);
                    foreach (MySqlParameter pram in parms)
                        cmd.Parameters.Add(pram);
                    cmd.ExecuteNonQuery();
                    
                    tran.Commit();
                }
                catch (Exception e)
                {
                    if (null != tran)
                    {
                        tran.Rollback();
                    }
                    throw (e);
                }
            }
        }

        /**
        *sequeceName:需要更新的序列名称
        *key:主键字段名称
        *tableName:表名称
        */
        public void updateSequence(String sequeceName)
        {
            MySqlTransaction tran = null;
            using (MySqlConnection conn = new MySqlConnection(ConnectionStringOrderDistributedTransaction))
            {
                try
                {
                    conn.Open();
                    tran = conn.BeginTransaction();

                    String SQL_DROP_SEQUENCE = "ALTER TABLE " + TABLE_NAME +" DROP "+ sequeceName;
                    MySqlCommand cmd1 = new MySqlCommand(SQL_DROP_SEQUENCE, conn);
                    cmd1.ExecuteNonQuery();

                    String SQL_ADD_SEQUENC = "ALTER TABLE " + TABLE_NAME + " ADD " + sequeceName +
                        " INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (" + sequeceName + ")";

                    MySqlCommand cmd2 = new MySqlCommand(SQL_ADD_SEQUENC, conn);
                    cmd2.ExecuteNonQuery();

                    tran.Commit();
                }
                catch (Exception e)
                {
                    if (null != tran)
                    {
                        tran.Rollback();
                    }
                    throw (e);
                }
            }
        }


        /// <summary>
        /// An internal function to get the database parameters
        /// </summary>
        /// <returns>Parameter array</returns>
        private static MySqlParameter[] GetAdapterParameters()
        {
            MySqlParameter[] parms = null;

            if (parms == null)
            {
                parms = new MySqlParameter[]{					                            
                                        new MySqlParameter(PARM_DEVCODE, MySqlDbType.VarChar, 255),                                        
                                        new MySqlParameter(PARM_LOGTIME, MySqlDbType.DateTime),
                                        new MySqlParameter(PARM_MESSAGE, MySqlDbType.VarChar,255)
                };
            }

            return parms;
        }


        /// <summary>
        /// An internal function to bind values parameters for insert
        /// </summary>
        /// <param name="parms">Database parameters</param>
        /// <param name="RQ">Values to bind to parameters</param>
        private void SetAdapterParameters(MySqlParameter[] parms, Model.Alarm alarm)
        {
            parms[0].Value = alarm.DEVCODE;

            if (null != alarm.LOGTIME)
            {
                parms[1].Value = alarm.LOGTIME;
            }
            else
            {
                parms[1].Value = DBNull.Value;
            }

            if (null != alarm.MESSAGE)
            {
                parms[2].Value = alarm.MESSAGE;
            }
            else
            {
                parms[2].Value = DBNull.Value;
            }
        }
    }
}