Files
2026-04-17 14:55:32 -04:00

155 lines
5.6 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
namespace DatabaseExport
{
public abstract class DbTimeStampBase : IDbTimeStampAware, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected bool SetProperty<T>(ref T storage, T value, String propertyName = null)
{
if (Equals(storage, value)) return false;
storage = value;
OnPropertyChanged(propertyName);
return true;
}
protected void OnPropertyChanged(string propertyName = null)
{
var eventHandler = PropertyChanged;
if (eventHandler != null)
{
eventHandler(this, new PropertyChangedEventArgs(propertyName));
}
}
protected long DbTimeStamp;
public long GetTimeStampMemory()
{
return DbTimeStamp;
}
public void SetTimeStampMemory(long value) { DbTimeStamp = value; }
public void SetTimeStampMemory(System.Data.DataRow row)
{
DbTimeStamp = 0;
}
public void SetTimeStampMemory(IDataReader reader)
{
DbTimeStamp = 0;
}
public long GetTimeStampDb(Dictionary<string, long> lookup)
{
//var constraints = GetConstraints();
return 0; //lookup.ContainsKey(constraints[0].DbValue.ToString()) ? lookup[constraints[0].DbValue.ToString()] : GetTimeStampDb();
}
public Dictionary<string, long> GetAllTimeStampDb()
{
var lookup = new Dictionary<string, long>();
return lookup;
//try
//{
// var constraints = GetConstraints();
// if (1 == constraints.Length)
// {
// using (var cmd = DbOperations.GetSQLCommand())
// {
// cmd.CommandText = string.Format("SELECT [{0}], DbTimeStamp from {1}", constraints[0].ColumnName, LookupTable);
// using (var ds = DbOperations.Connection.QueryDataSet(cmd))
// {
// foreach (System.Data.DataRow dr in ds.Tables[0].Rows)
// {
// var s = Convert.ToString(dr[constraints[0].ColumnName]);
// if (DBNull.Value.Equals(dr["DbTimeStamp"])) { continue; }
// var res = BitConverter.ToInt64((dr["DbTimeStamp"] as byte[]), 0);
// lookup[s] = res;
// }
// }
// }
// }
//}
//catch (Exception ex) { APILogger.Log(ex); }
//return lookup;
}
public long GetTimeStampDb()
{
return 0;
//using (var sql = DbOperations.GetSQLCommand())
//{
// var sb = new StringBuilder(50);
// sb.AppendFormat("SELECT DbTimeStamp as A FROM {0} ", LookupTable);
// var constraints = GetConstraints();
// for (var i = 0; i < constraints.Length; i++)
// {
// sb.Append(0 == i ? "WHERE " : " AND ");
// sb.AppendFormat("{0}=@{1}", constraints[i].ColumnName, i);
// DbOperations.CreateParam(sql, string.Format("@{0}", i), constraints[i].DbType, constraints[i].DbValue);
// }
// sql.CommandText = sb.ToString();
// using (var ds = DbOperations.Connection.QueryDataSet(sql))
// {
// if (ds.Tables.Count <= 0 || ds.Tables[0].Rows.Count <= 0) return 0;
// if (DBNull.Value.Equals(ds.Tables[0].Rows[0]["A"])) return 0;
// try
// {
// var res = BitConverter.ToInt64(ds.Tables[0].Rows[0]["A"] as byte[], 0);
// System.Diagnostics.Trace.WriteLine(string.Format("Db: {0}", res));
// return res;
// }
// catch (Exception ex) { APILogger.Log(ex); return 0; }
// }
//}
}
public abstract string LookupTable
{
get;
}
public class ConstraintHelper
{
public string ColumnName { get; set; }
public System.Data.SqlDbType DbType { get; set; }
public object DbValue { get; set; }
}
public abstract ConstraintHelper[] GetConstraints();
public bool IsNotInDb()
{
return GetTimeStampDb() == 0;
}
public bool IsOutOfDate()
{
var db = GetTimeStampDb();
var mem = GetTimeStampMemory();
//if there's no record in the db, don't mark as out of date
if (db == 0) { return false; }
//if is in db, but in memory is new, allow overwrite...
if (mem == 0 && db != 0) { mem = db; SetTimeStampMemory(db); }
return db != mem;
}
}
public interface IDbTimeStampAware
{
long GetTimeStampMemory();
void SetTimeStampMemory(long value);
long GetTimeStampDb();
bool IsOutOfDate();
}
public class DbItemOutOfDateException : Exception
{
public DbItemOutOfDateException(string msg)
: base(msg)
{
}
}
}