C# SCADA
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

556 lines
13 KiB

using System;
using System.Collections.Generic;
using System.Data;
using DataService;
namespace BatchCoreService
{
internal class AlarmDataReader : IDataReader
{
IEnumerator<AlarmItem> _enumer;
public AlarmDataReader(IEnumerable<AlarmItem> list)
{
this._enumer = list.GetEnumerator();
}
#region IDataReader Members
public void Close()
{
}
public int Depth
{
get { return 0; }
}
public DataTable GetSchemaTable()
{
DataTable table = new DataTable("AlarmItem");
table.Columns.Add("StartTime", typeof(DateTime));
table.Columns.Add("Source", typeof(string));
table.Columns.Add("ConditionId", typeof(int));
table.Columns.Add("AlarmText", typeof(string));
table.Columns.Add("AlarmValue", typeof(object));
table.Columns.Add("Duration", typeof(int));
table.Columns.Add("Severity", typeof(int));
table.Columns.Add("SubAlarmType", typeof(int));
return table;
}
public bool IsClosed
{
get { return false; }
}
public bool NextResult()
{
return false;
}
public bool Read()
{
return _enumer.MoveNext();
}
public int RecordsAffected
{
get { throw new NotImplementedException(); }
}
#endregion
#region IDisposable Members
public void Dispose()
{
}
#endregion
#region IDataRecord Members
public int FieldCount
{
get { return 8; }
}
public bool GetBoolean(int i)
{
return (bool)GetValue(i);
}
public byte GetByte(int i)
{
return (byte)GetValue(i);
}
public long GetBytes(int i, long fieldOffset, byte[] buffer, int bufferoffset, int length)
{
throw new NotImplementedException();
}
public char GetChar(int i)
{
return (char)GetValue(i);
}
public long GetChars(int i, long fieldoffset, char[] buffer, int bufferoffset, int length)
{
throw new NotImplementedException();
}
public IDataReader GetData(int i)
{
throw new NotImplementedException();
}
public string GetDataTypeName(int i)
{
throw new NotImplementedException();
}
public DateTime GetDateTime(int i)
{
return (DateTime)GetValue(i);
}
public decimal GetDecimal(int i)
{
return (decimal)GetValue(i);
}
public double GetDouble(int i)
{
return (double)GetValue(i);
}
public Type GetFieldType(int i)
{
switch (i)
{
case 0:
return typeof(DateTime);
case 1:
return typeof(string);
case 2:
return typeof(int);
case 3:
return typeof(string);
case 4:
return typeof(object);
case 5:
return typeof(int);
case 6:
return typeof(int);
case 7:
return typeof(int);
default:
return typeof(string);
}
}
public float GetFloat(int i)
{
return (float)GetValue(i);
}
public Guid GetGuid(int i)
{
return (Guid)GetValue(i);
}
public short GetInt16(int i)
{
return (short)GetValue(i);
}
public int GetInt32(int i)
{
return (int)GetValue(i);
}
public long GetInt64(int i)
{
return (long)GetValue(i);
}
public string GetName(int i)
{
switch (i)
{
case 0:
return "StartTime";
case 1:
return "Source";
case 2:
return "ConditionId";
case 3:
return "AlarmText";
case 4:
return "AlarmValue";
case 5:
return "Duration";
case 6:
return "Severity";
case 7:
return "SubAlarmType";
default:
return "";
}
}
public int GetOrdinal(string name)
{
switch (name)
{
case "StartTime":
return 0;
case "Source":
return 1;
case "ConditionId":
return 2;
case "AlarmText":
return 3;
case "AlarmValue":
return 4;
case "Duration":
return 5;
case "Severity":
return 6;
case "SubAlarmType":
return 7;
default:
return -1;
}
}
public string GetString(int i)
{
return (string)GetValue(i);
}
public object GetValue(int i)
{
switch (i)
{
case 0:
return _enumer.Current.StartTime;
case 1:
return _enumer.Current.Source;
case 2:
return _enumer.Current.ConditionId;
case 3:
return _enumer.Current.AlarmText;
case 4:
return _enumer.Current.AlarmValue;
case 5:
return _enumer.Current.Duration.Seconds;
case 6:
return _enumer.Current.Severity;
case 7:
return _enumer.Current.SubAlarmType;
default:
return null;
}
}
public int GetValues(object[] values)
{
throw new NotImplementedException();
}
public bool IsDBNull(int i)
{
switch (i)
{
case 0:
return _enumer.Current.StartTime == DateTime.MinValue;
case 1:
return string.IsNullOrEmpty(_enumer.Current.Source);
case 2:
return _enumer.Current.ConditionId == 0;
case 3:
return string.IsNullOrEmpty(_enumer.Current.AlarmText);
case 4:
return _enumer.Current.AlarmValue == null;
case 5:
case 6:
case 7:
default:
return false;
}
}
public object this[string name]
{
get
{
return GetValue(GetOrdinal(name));
}
}
public object this[int i]
{
get
{
return GetValue(i);
}
}
#endregion
}
internal class HDASqlReader : IDataReader
{
IEnumerator<HistoryData> _enumer;
IDataServer _server;
public HDASqlReader(IEnumerable<HistoryData> list, IDataServer server)
{
this._enumer = list.GetEnumerator();
_server = server;
}
#region IDataReader Members
public void Close()
{
}
public int Depth
{
get { return 0; }
}
public DataTable GetSchemaTable()
{
DataTable table = new DataTable("Log_HData");
table.Columns.Add("ID", typeof(short));
table.Columns.Add("TimeStamp", typeof(DateTime));
table.Columns.Add("Value", typeof(float));
return table;
}
public bool IsClosed
{
get { return false; }
}
public bool NextResult()
{
return false;
}
public bool Read()
{
return _enumer.MoveNext();
}
public int RecordsAffected
{
get { throw new NotImplementedException(); }
}
#endregion
#region IDisposable Members
public void Dispose()
{
}
#endregion
#region IDataRecord Members
public int FieldCount
{
get { return 3; }
}
public bool GetBoolean(int i)
{
return (bool)GetValue(i);
}
public byte GetByte(int i)
{
return (byte)GetValue(i);
}
public long GetBytes(int i, long fieldOffset, byte[] buffer, int bufferoffset, int length)
{
throw new NotImplementedException();
}
public char GetChar(int i)
{
return (char)GetValue(i);
}
public long GetChars(int i, long fieldoffset, char[] buffer, int bufferoffset, int length)
{
throw new NotImplementedException();
}
public IDataReader GetData(int i)
{
return this;
}
public string GetDataTypeName(int i)
{
throw new NotImplementedException();
}
public DateTime GetDateTime(int i)
{
return (DateTime)GetValue(i);
}
public decimal GetDecimal(int i)
{
return (decimal)GetValue(i);
}
public double GetDouble(int i)
{
return (double)GetValue(i);
}
public Type GetFieldType(int i)
{
switch (i)
{
case 0:
return typeof(Int16);
case 1:
return typeof(DateTime);
case 2:
return typeof(Single);
default:
return typeof(Int32);
}
}
public float GetFloat(int i)
{
return Convert.ToSingle(GetValue(i));
}
public Guid GetGuid(int i)
{
return (Guid)GetValue(i);
}
public short GetInt16(int i)
{
return (short)GetValue(i);
}
public int GetInt32(int i)
{
return (int)GetValue(i);
}
public long GetInt64(int i)
{
return (long)GetValue(i);
}
public string GetName(int i)
{
switch (i)
{
case 0:
return "ID";
case 1:
return "TimeStamp";
case 2:
return "Value";
default:
return string.Empty;
}
}
public int GetOrdinal(string name)
{
switch (name)
{
case "ID":
return 0;
case "TimeStamp":
return 1;
case "Value":
return 2;
default:
return -1;
}
}
public string GetString(int i)
{
return (string)GetValue(i);
}
public object GetValue(int i)
{
switch (i)
{
case 0:
return _enumer.Current.ID;
case 1:
return _enumer.Current.TimeStamp;
case 2:
var index = _server.GetItemProperties(_enumer.Current.ID);
if (index < 0) return 0f;
switch (_server.MetaDataList[index].DataType)
{
case DataType.FLOAT:
var ff = _enumer.Current.Value.Single;
return ff > -2E-38 && ff < 2E-38 ? 0f : ff;
case DataType.BOOL:
return _enumer.Current.Value.Boolean ? 1f : 0f;
case DataType.INT:
return _enumer.Current.Value.Int32;
case DataType.WORD:
case DataType.SHORT:
return _enumer.Current.Value.Int16;
case DataType.BYTE:
return _enumer.Current.Value.Byte;
default:
return 0f;
}
default:
return 0f; ;
}
}
public int GetValues(object[] values)
{
throw new NotImplementedException();
}
public bool IsDBNull(int i)
{
return false;
}
public object this[string name]
{
get
{
return GetValue(GetOrdinal(name));
}
}
public object this[int i]
{
get
{
return GetValue(i);
}
}
#endregion
}
}