同步操作将从 盘古软件/SharpSCADA 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Data.SqlClient;using DataService;namespace FileDriver{[Description("SQL 数据库")]public class DataBaseReader : IFileDriver, IMultiReadWrite{public bool IsClosed{get{return m_Conn == null || m_Conn.State != ConnectionState.Open;}}short _id;public short ID{get{return _id;}}int _timeOut;public int TimeOut{get { return m_Conn == null ? _timeOut : m_Conn.ConnectionTimeout; }set{_timeOut = value;}}string _name;public string Name{get{return _name;}}string _serverIP = ".";public string ServerName{get{return _serverIP;}set{_serverIP = value;}}string _ins;public string Instance{get{return _ins;}set{_ins = value;}}string _database;public string FileName{get{return _database;}set{_database = value;}}List<IGroup> _groups = new List<IGroup>();public IEnumerable<IGroup> Groups{get { return _groups; }}IDataServer _server;public IDataServer Parent{get { return _server; }}public DataBaseReader(IDataServer parent, short id, string name){_id = id;_name = name;_server = parent;}SqlConnection m_Conn;public bool Connect(){SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();builder.DataSource = (_ins == null ? _serverIP : string.Format(@"{0}\{1}", _serverIP, _ins));builder.InitialCatalog = _database;builder.ConnectTimeout = _timeOut;builder.IntegratedSecurity = true;m_Conn = new SqlConnection(builder.ConnectionString);//mySqlConnection.ConnectionTimeout = 1;//设置连接超时的时间,写在连接字符串内try{//Open DataBase//打开数据库m_Conn.Open();return m_Conn.State == ConnectionState.Open;}catch (Exception e){if (OnError != null)OnError(this, new IOErrorEventArgs(e.Message));return false;}}public IGroup AddGroup(string name, short id, int updateRate, float deadBand = 0f, bool active = false){FileDeviceGroup grp = new FileDeviceGroup(id, name, updateRate, active, this);_groups.Add(grp);return grp;}public bool RemoveGroup(IGroup grp){grp.IsActive = false;return _groups.Remove(grp);}public void Dispose(){foreach (IGroup grp in _groups){grp.Dispose();}_groups.Clear();m_Conn.Close(); m_Conn.Dispose();}public SqlDataReader ExecuteProcedureReader(string sSQL, params SqlParameter[] ParaName){SqlCommand command = new SqlCommand(sSQL, m_Conn);command.CommandType = CommandType.StoredProcedure;if (ParaName != null){command.Parameters.AddRange(ParaName);}try{if (m_Conn.State == ConnectionState.Closed)m_Conn.Open();return command.ExecuteReader(CommandBehavior.CloseConnection);}catch (Exception e){if (OnError != null)OnError(this, new IOErrorEventArgs(e.Message));return null;}}public int ExecuteStoredProcedure(string ProName, params SqlParameter[] ParaName){try{SqlCommand cmd = new SqlCommand(ProName, m_Conn);cmd.CommandType = CommandType.StoredProcedure;if (ParaName != null){cmd.Parameters.AddRange(ParaName);}SqlParameter param = new SqlParameter();cmd.Parameters.Add(param);param.Direction = ParameterDirection.ReturnValue;if (m_Conn.State == ConnectionState.Closed)m_Conn.Open();cmd.ExecuteNonQuery();m_Conn.Close();return (int)param.Value;}catch (Exception e){m_Conn.Close();if (OnError != null)OnError(this, new IOErrorEventArgs(e.Message));return -1;}}public byte[] ReadBytes(DeviceAddress address, ushort size){using (var dataReader = ExecuteProcedureReader("ReadValueByID",new SqlParameter("@ID", SqlDbType.SmallInt) { Value = address.CacheIndex },new SqlParameter("@DATATYPE", SqlDbType.TinyInt) { Value = address.VarType })){if (dataReader != null){while (dataReader.Read()){return dataReader[0] as byte[];}}}return null;}public ItemData<int> ReadInt32(DeviceAddress address){ItemData<int> data = new ItemData<int>();var dataReader = ExecuteProcedureReader("ReadValueByID",new SqlParameter("@ID", SqlDbType.SmallInt) { Value = address.CacheIndex },new SqlParameter("@DATATYPE", SqlDbType.TinyInt) { Value = address.VarType });if (dataReader == null){data.Quality = QUALITIES.QUALITY_BAD;return data;}while (dataReader.Read()){data.Value = dataReader.GetInt32(0);data.Quality = QUALITIES.QUALITY_GOOD;}dataReader.Close();return data;}public ItemData<uint> ReadUInt32(DeviceAddress address){var res = ReadInt32(address);return new ItemData<uint>((uint)res.Value, res.TimeStamp, res.Quality);}public ItemData<ushort> ReadUInt16(DeviceAddress address){var res = ReadInt16(address);return new ItemData<ushort>((ushort)res.Value, res.TimeStamp, res.Quality);}public ItemData<short> ReadInt16(DeviceAddress address){ItemData<short> data = new ItemData<short>();var dataReader = ExecuteProcedureReader("ReadValueByID",new SqlParameter("@ID", SqlDbType.SmallInt) { Value = address.CacheIndex },new SqlParameter("@DATATYPE", SqlDbType.TinyInt) { Value = address.VarType });if (dataReader == null){data.Quality = QUALITIES.QUALITY_BAD;return data;}while (dataReader.Read()){data.Value = dataReader.GetInt16(0);data.Quality = QUALITIES.QUALITY_GOOD;}dataReader.Close();return data;}public ItemData<byte> ReadByte(DeviceAddress address){ItemData<byte> data = new ItemData<byte>();var dataReader = ExecuteProcedureReader("ReadValueByID",new SqlParameter("@ID", SqlDbType.SmallInt) { Value = address.CacheIndex },new SqlParameter("@DATATYPE", SqlDbType.TinyInt) { Value = address.VarType });if (dataReader == null){data.Quality = QUALITIES.QUALITY_BAD;return data;}while (dataReader.Read()){data.Value = dataReader.GetByte(0);data.Quality = QUALITIES.QUALITY_GOOD;}dataReader.Close();return data;}public ItemData<string> ReadString(DeviceAddress address, ushort size){ItemData<string> data = new ItemData<string>();var dataReader = ExecuteProcedureReader("ReadValueByID",new SqlParameter("@ID", SqlDbType.SmallInt) { Value = address.CacheIndex },new SqlParameter("@DATATYPE", SqlDbType.TinyInt) { Value = address.VarType });if (dataReader == null){data.Quality = QUALITIES.QUALITY_BAD;return data;}while (dataReader.Read()){data.Value = dataReader.GetString(0);data.Quality = QUALITIES.QUALITY_GOOD;}dataReader.Close();return data;}public ItemData<float> ReadFloat(DeviceAddress address){ItemData<float> data = new ItemData<float>();var dataReader = ExecuteProcedureReader("ReadValueByID",new SqlParameter("@ID", SqlDbType.SmallInt) { Value = address.CacheIndex },new SqlParameter("@DATATYPE", SqlDbType.TinyInt) { Value = address.VarType });if (dataReader == null){data.Quality = QUALITIES.QUALITY_BAD;return data;}while (dataReader.Read()){data.Value = dataReader.GetFloat(0);data.Quality = QUALITIES.QUALITY_GOOD;}dataReader.Close();return data;}public ItemData<bool> ReadBit(DeviceAddress address){ItemData<bool> data = new ItemData<bool>();var dataReader = ExecuteProcedureReader("ReadValueByID",new SqlParameter("@ID", SqlDbType.SmallInt) { Value = address.CacheIndex },new SqlParameter("@DATATYPE", SqlDbType.TinyInt) { Value = address.VarType });if (dataReader == null){data.Quality = QUALITIES.QUALITY_BAD;return data;}while (dataReader.Read()){data.Value = dataReader.GetBoolean(0);data.Quality = QUALITIES.QUALITY_GOOD;}dataReader.Close();return data;}public ItemData<object> ReadValue(DeviceAddress address){ItemData<object> data = new ItemData<object>();var dataReader = ExecuteProcedureReader("ReadValueByID",new SqlParameter("@ID", SqlDbType.SmallInt) { Value = address.CacheIndex },new SqlParameter("@DATATYPE", SqlDbType.TinyInt) { Value = address.VarType });if (dataReader == null){data.Quality = QUALITIES.QUALITY_BAD;return data;}while (dataReader.Read()){data.Value = dataReader.GetValue(0);data.Quality = QUALITIES.QUALITY_GOOD;}dataReader.Close();return data;}public int WriteBytes(DeviceAddress address, byte[] bits){return ExecuteStoredProcedure("UpdateValueByID",new SqlParameter("@ID", SqlDbType.SmallInt) { Value = address.CacheIndex },new SqlParameter("@Value", SqlDbType.Variant) { Value = bits });}public int WriteBit(DeviceAddress address, bool bit){return ExecuteStoredProcedure("UpdateValueByID",new SqlParameter("@ID", SqlDbType.SmallInt) { Value = address.CacheIndex },new SqlParameter("@Value", SqlDbType.Variant) { Value = bit });}public int WriteBits(DeviceAddress address, byte bits){return ExecuteStoredProcedure("UpdateValueByID",new SqlParameter("@ID", SqlDbType.SmallInt) { Value = address.CacheIndex },new SqlParameter("@Value", SqlDbType.Variant) { Value = bits });}public int WriteInt16(DeviceAddress address, short value){return ExecuteStoredProcedure("UpdateValueByID",new SqlParameter("@ID", SqlDbType.SmallInt) { Value = address.CacheIndex },new SqlParameter("@Value", SqlDbType.Variant) { Value = value });}public int WriteUInt16(DeviceAddress address, ushort value){return ExecuteStoredProcedure("UpdateValueByID",new SqlParameter("@ID", SqlDbType.SmallInt) { Value = address.CacheIndex },new SqlParameter("@Value", SqlDbType.Variant) { Value = value });}public int WriteUInt32(DeviceAddress address, uint value){return ExecuteStoredProcedure("UpdateValueByID",new SqlParameter("@ID", SqlDbType.SmallInt) { Value = address.CacheIndex },new SqlParameter("@Value", SqlDbType.Variant) { Value = value });}public int WriteInt32(DeviceAddress address, int value){return ExecuteStoredProcedure("UpdateValueByID",new SqlParameter("@ID", SqlDbType.SmallInt) { Value = address.CacheIndex },new SqlParameter("@Value", SqlDbType.Variant) { Value = value });}public int WriteFloat(DeviceAddress address, float value){return ExecuteStoredProcedure("UpdateValueByID",new SqlParameter("@ID", SqlDbType.SmallInt) { Value = address.CacheIndex },new SqlParameter("@Value", SqlDbType.Variant) { Value = value });}public int WriteString(DeviceAddress address, string str){return ExecuteStoredProcedure("UpdateValueByID",new SqlParameter("@ID", SqlDbType.SmallInt) { Value = address.CacheIndex },new SqlParameter("@Value", SqlDbType.Variant, address.DataSize) { Value = str });}public int WriteValue(DeviceAddress address, object value){return ExecuteStoredProcedure("UpdateValueByID",new SqlParameter("@ID", SqlDbType.SmallInt) { Value = address.CacheIndex },new SqlParameter("@Value", SqlDbType.Variant, address.DataSize) { Value = value });}public ItemData<Storage>[] ReadMultiple(DeviceAddress[] addrsArr){int len = addrsArr.Length;SqlParameter param = new SqlParameter("@IDARRAY", SqlDbType.VarChar);string str = string.Empty;for (int i = 0; i < len; i++){str += addrsArr[i].CacheIndex + '|' + (int)addrsArr[i].VarType + ',';}param.Value = str;var dataReader = ExecuteProcedureReader("BatchReadByID", param);//可以采用IN 操作符+,if (dataReader == null)return null;else{ItemData<Storage>[] itemArr = new ItemData<Storage>[len];int i = 0;while (dataReader.Read()){switch (addrsArr[i].VarType){case DataType.BOOL:itemArr[i].Value.Boolean = dataReader.GetBoolean(0);break;case DataType.BYTE:itemArr[i].Value.Byte = dataReader.GetByte(0);break;case DataType.WORD:itemArr[i].Value.Word = (ushort)dataReader.GetInt16(0);break;case DataType.SHORT:itemArr[i].Value.Int16 = dataReader.GetInt16(0);break;case DataType.DWORD:itemArr[i].Value.DWord = (uint)dataReader.GetInt32(0);break;case DataType.INT:itemArr[i].Value.Int32 = dataReader.GetInt32(0);break;case DataType.FLOAT:itemArr[i].Value.Single = dataReader.GetFloat(0);break;}i++;}dataReader.Close();return itemArr;}}public int WriteMultiple(DeviceAddress[] addrArr, object[] buffer){int len = addrArr.Length;SqlParameter param = new SqlParameter("@IDARRAY", SqlDbType.VarChar);string str = string.Empty;for (int i = 0; i < len; i++){str += addrArr[i].CacheIndex.ToString() + "|" + buffer[i].ToString() + ",";}param.Value = str;return ExecuteStoredProcedure("BatchUpdateByID", param);}public FileData[] ReadAll(short groupId){FileData[] list = null;using (var reader = ExecuteProcedureReader("ReadAll", new SqlParameter("@GroupId", groupId))){if (reader == null) return null;if (reader.Read()){int count = reader.GetInt32(0);list = new FileData[count];reader.NextResult();int i = 0;while (reader.Read()){if (i < count){list[i].ID = reader.GetInt16(0);switch ((DataType)reader.GetByte(1)){case DataType.BOOL:list[i].Value.Boolean = Convert.ToBoolean(reader.GetValue(2));break;case DataType.BYTE:list[i].Value.Byte = Convert.ToByte(reader.GetValue(2));break;case DataType.WORD:list[i].Value.Word = Convert.ToUInt16(reader.GetValue(2));break;case DataType.SHORT:list[i].Value.Int16 = Convert.ToInt16(reader.GetValue(2));break;case DataType.DWORD:list[i].Value.DWord = Convert.ToUInt32(reader.GetValue(2));break;case DataType.INT:list[i].Value.Int32 = Convert.ToInt32(reader.GetValue(2));break;case DataType.FLOAT:list[i].Value.Single = Convert.ToSingle(reader.GetValue(2));break;case DataType.STR:list[i].Text = Convert.ToString(reader.GetValue(2));//如何传送字符串?break;}i++;}}}}return list;}public int Limit{get { return 0x100; }}public event IOErrorEventHandler OnError;}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。