using System; using System.Configuration; using Csla; using System.Data.SqlClient; using System.IO; namespace Volian.Object.Library { public static class Database { #region Log4Net private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); #endregion public static string VEPROMS_Connection { get { DateTime.Today.ToLongDateString(); ConnectionStringSettings cs = ConfigurationManager.ConnectionStrings["VEPROMS"]; if (cs == null) { throw new ApplicationException("Database.cs Could not find connection VEPROMS"); } return cs.ConnectionString; } } 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 failed" if (strConn.ToLower().IndexOf("user instance=true") < 0) { throw new ApplicationException("Connection String missing attribute: User Instance=True"); } if (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 (log.IsErrorEnabled) log.Error("Connection Error", ex); throw new ApplicationException("Failure on Connect", ex); } } } public static void LogException(string s,Exception ex) { log.Error(s,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); } } } }