211 lines
7.8 KiB
C#
211 lines
7.8 KiB
C#
// ========================================================================
|
|
// Copyright 2007 - Volian Enterprises, Inc. All rights reserved.
|
|
// Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
|
|
// ------------------------------------------------------------------------
|
|
// $Workfile: $ $Revision: $
|
|
// $Author: $ $Date: $
|
|
//
|
|
// $History: $
|
|
// ========================================================================
|
|
|
|
using System;
|
|
using System.Data;
|
|
using System.Data.SqlClient;
|
|
using Csla;
|
|
using Csla.Data;
|
|
using System.Configuration;
|
|
using System.IO;
|
|
using System.ComponentModel;
|
|
using System.Diagnostics;
|
|
namespace VEPROMS.CSLA.Library
|
|
{
|
|
/// <summary>
|
|
/// Database Generated by MyGeneration using the CSLA Object Mapping template
|
|
/// </summary>
|
|
[Serializable()]
|
|
public static partial class Database
|
|
{
|
|
#region Log4Net
|
|
private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
|
#endregion
|
|
public static void LogException(string s, Exception ex)
|
|
{
|
|
int i = 0;
|
|
Console.WriteLine("Error - {0}", s);
|
|
for (; ex != null; ex = ex.InnerException)
|
|
{
|
|
Console.WriteLine("{0}{1} - {2}", "".PadLeft(++i * 2), ex.GetType().ToString(), ex.Message);
|
|
}
|
|
}
|
|
private static bool _LoggingInfo = false; // By default don't log info
|
|
public static bool LoggingInfo
|
|
{
|
|
get { return _LoggingInfo; }
|
|
set { _LoggingInfo = value; }
|
|
}
|
|
static System.Diagnostics.Process _CurrentProcess = System.Diagnostics.Process.GetCurrentProcess();
|
|
public static void LogInfo(string s, int hashCode)
|
|
{
|
|
if (_LoggingInfo)
|
|
Console.WriteLine("{0} MB {1}", _CurrentProcess.WorkingSet64 / 1000000, string.Format(s, hashCode));
|
|
}
|
|
public static void LogDebug(string s, int hashCode)
|
|
{
|
|
if (_LoggingInfo)
|
|
Console.WriteLine("{0} MB {1}", _CurrentProcess.WorkingSet64 / 1000000, string.Format(s, hashCode));
|
|
}
|
|
private static string _ConnectionName = "VEPROMS";
|
|
public static string ConnectionName
|
|
{
|
|
get { return Database._ConnectionName; }
|
|
set { Database._ConnectionName = value; _VEPROMS_Connection = null; /* Reset Connection */ }
|
|
}
|
|
private static string _VEPROMS_Connection;
|
|
public static string VEPROMS_Connection
|
|
{
|
|
get
|
|
{
|
|
if (_VEPROMS_Connection != null) // Use Lazy Load
|
|
return _VEPROMS_Connection;
|
|
DateTime.Today.ToLongDateString();
|
|
// If DBConnection.XML exists, use the connection string from DBConnection.XML
|
|
string cnOverride = System.Windows.Forms.Application.StartupPath + @"\DBConnection.XML";
|
|
if (System.IO.File.Exists(cnOverride))
|
|
{
|
|
System.Xml.XmlDocument xd = new System.Xml.XmlDocument();
|
|
xd.Load(cnOverride);
|
|
System.Xml.XmlNode xn = xd.SelectSingleNode("DBConnection/@string");
|
|
if (xn != null)
|
|
{
|
|
return _VEPROMS_Connection = xn.InnerText;
|
|
}
|
|
}
|
|
// Otherwise get the value from the ConfigurationManager
|
|
ConnectionStringSettings cs = ConfigurationManager.ConnectionStrings[ConnectionName];
|
|
if (cs == null)
|
|
{
|
|
throw new ApplicationException("Database.cs Could not find connection " + ConnectionName);
|
|
}
|
|
string constr = cs.ConnectionString;
|
|
if (constr.Contains("{MENU}"))
|
|
{
|
|
constr = ChooseDatabase(constr);
|
|
}
|
|
return _VEPROMS_Connection = constr;
|
|
}
|
|
}
|
|
private static string _SelectedDatabase;
|
|
|
|
public static string SelectedDatabase
|
|
{
|
|
get { return Database._SelectedDatabase; }
|
|
set { Database._SelectedDatabase = value; }
|
|
}
|
|
private static string ChooseDatabase(string constr)
|
|
{
|
|
string tmp = constr.Replace("{MENU}", "master");
|
|
SqlConnection cn = new SqlConnection(tmp);
|
|
cn.Open();
|
|
// SqlDataAdapter da = new SqlDataAdapter("select name from sysdatabases where name like 'VEP%' order by name", cn);
|
|
SqlDataAdapter da = new SqlDataAdapter("select name,case when object_id(name + '..Revisions') is not null then 'Approval' when object_id(name + '..ContentAudits') is not null then 'Change Manager' else 'Original' end functionality from sysdatabases where name like 'VEP%' order by name", cn);
|
|
DataSet ds = new DataSet();
|
|
da.Fill(ds);
|
|
cn.Close();
|
|
System.Windows.Forms.ContextMenuStrip cms = new System.Windows.Forms.ContextMenuStrip();
|
|
cms.Items.Add("Choose Database");
|
|
System.Windows.Forms.ToolStripMenuItem tsmi = cms.Items[0] as System.Windows.Forms.ToolStripMenuItem;
|
|
tsmi.BackColor = System.Drawing.Color.FromKnownColor(System.Drawing.KnownColor.ActiveCaption);// System.Drawing.Color.Pink;
|
|
tsmi.ForeColor = System.Drawing.Color.FromKnownColor(System.Drawing.KnownColor.ActiveCaptionText);
|
|
tsmi.Font = new System.Drawing.Font(tsmi.Font, System.Drawing.FontStyle.Bold);
|
|
foreach (DataRow dr in ds.Tables[0].Rows)
|
|
{
|
|
if(dr["functionality"].ToString() == "Approval")
|
|
cms.Items.Add(dr["name"].ToString(), null, new EventHandler(Database_Click));
|
|
}
|
|
while (_SelectedDatabase == null)
|
|
{
|
|
cms.Show(new System.Drawing.Point((System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Width - cms.Width) / 2, (System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height - cms.Height) / 2));
|
|
System.Windows.Forms.Application.DoEvents();
|
|
}
|
|
return constr.Replace("{MENU}", _SelectedDatabase);
|
|
}
|
|
|
|
static void Database_Click(object sender, EventArgs e)
|
|
{
|
|
System.Windows.Forms.ToolStripMenuItem tsmi = sender as System.Windows.Forms.ToolStripMenuItem;
|
|
if (tsmi != null)
|
|
{
|
|
_SelectedDatabase = tsmi.Text;
|
|
}
|
|
}
|
|
|
|
public static SqlConnection VEPROMS_SqlConnection
|
|
{
|
|
get
|
|
{
|
|
string strConn = VEPROMS_Connection; // If failure - Fail (Don't try to catch)
|
|
// Attempt to make a connection
|
|
try
|
|
{
|
|
SqlConnection cn = new SqlConnection(strConn);
|
|
cn.Open();
|
|
return cn;
|
|
}
|
|
catch (SqlException exsql)
|
|
{
|
|
const string strAttachError = "An attempt to attach an auto-named database for file ";
|
|
if (exsql.Message.StartsWith(strAttachError))
|
|
{// Check to see if the file is missing
|
|
string sFile = exsql.Message.Substring(strAttachError.Length);
|
|
sFile = sFile.Substring(0, sFile.IndexOf(" failed"));
|
|
// "An attempt to attach an auto-named database for file <mdf file> failed"
|
|
if (strConn.ToLower().IndexOf("user instance=true") < 0)
|
|
{
|
|
throw new ApplicationException("Connection String missing attribute: User Instance=True");
|
|
}
|
|
if (System.IO.File.Exists(sFile))
|
|
{
|
|
throw new ApplicationException("Database file " + sFile + " Cannot be opened\r\n", exsql);
|
|
}
|
|
else
|
|
{
|
|
throw new FileNotFoundException("Database file " + sFile + " Not Found", exsql);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
throw new ApplicationException("Failure on Connect", exsql);
|
|
}
|
|
}
|
|
catch (Exception ex)// Throw Application Exception on Failure
|
|
{
|
|
if (_MyLog.IsErrorEnabled) _MyLog.Error("Connection Error", ex);
|
|
throw new ApplicationException("Failure on Connect", ex);
|
|
}
|
|
}
|
|
}
|
|
public static void PurgeData()
|
|
{
|
|
try
|
|
{
|
|
SqlConnection cn = VEPROMS_SqlConnection;
|
|
SqlCommand cmd = new SqlCommand("purgedata", cn);
|
|
cmd.CommandType = CommandType.StoredProcedure;
|
|
cmd.CommandTimeout = 0;
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
if (_MyLog.IsErrorEnabled) _MyLog.Error("Purge Error", ex);
|
|
throw new ApplicationException("Failure on Purge", ex);
|
|
}
|
|
}
|
|
}
|
|
public class DbCslaException : Exception
|
|
{
|
|
internal DbCslaException(string message, Exception innerException) : base(message, innerException) { ;}
|
|
internal DbCslaException(string message) : base(message) { ;}
|
|
internal DbCslaException() : base() { ;}
|
|
} // Class
|
|
} // Namespace
|