Having re-read the postings I suppose i did wrong.
This is the full code of "Service1.cs":
using System;
using System.IO;
using System.Timers;
using System.ServiceProcess;
using System.Diagnostics;
namespace WindowsService1
{
public partial class Service1 : ServiceBase
{
private FileSystemWatcher watcher;
private Timer timer;
private Paths paths = new Paths();
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
timer = new Timer();
watcher = new System.IO.FileSystemWatcher();
watcher.Path = paths.PathOnlyXmlFile;
watcher.IncludeSubdirectories = false;
watcher.NotifyFilter = NotifyFilters.LastWrite;
watcher.Filter = "MOJN_FM.xml";
watcher.Changed += new FileSystemEventHandler
(watcher_Changed);
watcher.EnableRaisingEvents = true;
StreamWriter sw = new StreamWriter(@"e:\log.log", true);
sw.WriteLine("xml-path: " + paths.PathOnlyXmlFile);
sw.WriteLine("database: " + paths.FullPathDatabase);
sw.Dispose();
}
protected override void OnStop()
{
timer.Dispose();
watcher.Dispose();
}
private void OnElapsedTime(object source, ElapsedEventArgs e)
{
timer.Stop();
watcher.EnableRaisingEvents = true;
}
private void watcher_Changed(object source,
FileSystemEventArgs e)
{
if (!timer.Enabled)
{
watcher.EnableRaisingEvents = false;
timer.Elapsed += new ElapsedEventHandler
(OnElapsedTime);
timer.Interval = 15000;
timer.Start();
XmlHandler xh = new XmlHandler();
xh.Execute(e.FullPath);
//StreamWriter sw = new StreamWriter(@"e:\log.log",
true);
//sw.WriteLine("xml-file: " + e.FullPath);
//sw.WriteLine("xml-path: " + paths.PathOnlyXmlFile);
//sw.WriteLine("database: " + paths.FullPathDatabase);
//sw.Dispose();
}
}
}
}
This is the full code of "XmlHandler.cs":
using System;
using System.IO;
using System.Xml;
using System.Text;
using System.Data.OleDb;
using System.Diagnostics;
namespace WindowsService1
{
class XmlHandler
{
#region Privates
private Paths paths = new Paths();
private static string EVENT_SOURCE = "dbConsult_XmlHandler";
private string mEvent = string.Empty;
private string mType = string.Empty;
private string mCategory = string.Empty;
private string mId = string.Empty;
private string mTitle = string.Empty;
private string mArtist = string.Empty;
private string mAlbum = string.Empty;
private string mComposer = string.Empty;
private string mMusicId = string.Empty;
private Int32 mDuration = 0;
private string mStartTime = string.Empty;
private DateTime mRealStartTime;
#endregion
public XmlHandler()
{ }
public void Execute(string xmlFile)
{
// Create an instance of XmlTextReader and call Read
method to read the file
XmlReader reader = new XmlTextReader(xmlFile);
//try
//{
using (reader)
{
reader.Read(); //
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx this is the failing line
// If the node has value
while (reader.Read())
{
// Move to fist element
reader.MoveToElement();
if (reader.HasAttributes)
{
for (int i = 0; i < reader.AttributeCount;
i++)
{
reader.MoveToAttribute(i);
switch (reader.Name)
{
case "Event":
mEvent = reader.Value; break;
case "Type":
mType = reader.Value; break;
case "Category":
mCategory = reader.Value;
break;
case "Id":
mId = reader.Value; break;
case "Title":
mTitle = reader.Value; break;
case "Artist":
mArtist = reader.Value; break;
case "Album":
mAlbum = reader.Value; break;
case "Composer":
mComposer = reader.Value;
break;
case "MusicId":
mMusicId = reader.Value;
break;
case "Duration":
mDuration = Convert.ToInt32
(reader.Value); break;
case "StartTime":
mStartTime = reader.Value;
mRealStartTime = ProperDate
(mStartTime); break;
}
}
WriteToDatabase();
}
}
reader.Close();
} //using
//}
//catch (Exception e)
//{
// EventLog myLog = new EventLog();
// if (!EventLog.SourceExists(EVENT_SOURCE))
// {
// myLog.Source = EVENT_SOURCE;
// }
// myLog.WriteEntry("Execute(): " + e.Message,
EventLogEntryType.Error);
//}
}
private void WriteToDatabase()
{
StringBuilder sql = new StringBuilder();
sql.Append("INSERT INTO tEntry
(EntryEvent,Type,Category,Id,IdNumeric,Title,Artist,Album,Composer,MusicId,DurationSeconds,StartTime)
");
sql.Append("VALUES (");
sql.Append("'" + mEvent + "',");
sql.Append("'" + mType + "',");
sql.Append("'" + mCategory + "',");
sql.Append("'" + mId + "',");
//try
//{
sql.Append(Convert.ToInt32(mId) + ",");
//}
//catch (Exception e)
//{
// EventLog myLog = new EventLog();
// if (!EventLog.SourceExists(EVENT_SOURCE))
// {
// myLog.Source = EVENT_SOURCE;
// }
// myLog.WriteEntry("WriteToDatabase;mId.ToInt32: " +
e.Message, EventLogEntryType.Error);
//}
sql.Append("'" + mTitle + "',");
sql.Append("'" + mArtist + "',");
sql.Append("'" + mAlbum + "',");
sql.Append("'" + mComposer + "',");
sql.Append("'" + mMusicId + "',");
//try
//{
sql.Append(Convert.ToInt32(mDuration) / 1000 + ",");
//}
//catch (Exception e)
//{
// EventLog myLog = new EventLog();
// if (!EventLog.SourceExists(EVENT_SOURCE))
// {
// myLog.Source = EVENT_SOURCE;
// }
// myLog.WriteEntry("WriteToDatabase;mDuration.ToInt32:
" + e.Message, EventLogEntryType.Error);
//}
sql.Append("#" + mRealStartTime + "#)");
OleDbConnection con = new OleDbConnection
("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
paths.FullPathDatabase + ";User Id=admin;Password=;");
con.Open();
OleDbCommand com = new OleDbCommand(sql.ToString(), con);
com.ExecuteNonQuery();
com.Dispose();
con.Close();
con.Dispose();
}
#region Helpers
private DateTime ProperDate(string input)
{
int mSecond = Convert.ToInt16(input.Substring(17, 2));
int mMinute = Convert.ToInt16(input.Substring(14, 2));
int mHour = Convert.ToInt16(input.Substring(11, 2));
int mDay = Convert.ToInt16(input.Substring(8, 2));
int mMonth = ProperMonth(input.Substring(4, 3));
int mYear = Convert.ToInt16(input.Substring(20, 4));
return new DateTime(mYear, mMonth, mDay, mHour, mMinute,
mSecond);
}
private int ProperMonth(string input)
{
switch (input)
{
case "Jan":
return 1;
case "Feb":
return 2;
case "Mar":
return 3;
case "Apr":
return 4;
case "May":
return 5;
case "Jun":
return 6;
case "Jul":
return 7;
case "Aug":
return 8;
case "Sep":
return 9;
case "Oct":
return 10;
case "Nov":
return 11;
case "Dec":
return 12;
}
return 0;
}
#endregion
}
}
Regards
Morten Snedker