diff --git a/EpdBase3/Epd3Base.cpp b/EpdBase3/Epd3Base.cpp index 7d9e827..8330d0a 100644 --- a/EpdBase3/Epd3Base.cpp +++ b/EpdBase3/Epd3Base.cpp @@ -637,7 +637,6 @@ void Epd3Base::Epd3U::encodeTreshold(Mk3AlarmThresholds_t* th) th->Thresholds[3].Id = (uint16_t)ThresholdId::Thres_RateWarning; th->Thresholds[3].Value = *pTHRateWarning; } - /// /// HG, SG, BC, FB, BC, FB /// diff --git a/EpdBase3/TimeFunctions.cpp b/EpdBase3/TimeFunctions.cpp index aefacd8..48d20aa 100644 --- a/EpdBase3/TimeFunctions.cpp +++ b/EpdBase3/TimeFunctions.cpp @@ -28,6 +28,11 @@ UINT32 UnixTimeNow() { return FileTime_to_POSIX(ft); } +/// +/// Filetime is 100nS since 1601 01 01 UTC Unix = seconds since 1970 +/// +/// +/// void TimeFunctions::UnixTimeToFileTime(time_t t, LPFILETIME pft) { ULONG64 ll = ((ULONG64)t * (ULONG64)10000000) + (ULONG64)116444736000000000; @@ -42,35 +47,43 @@ void TimeFunctions::UnixTimeToFileTime(time_t t, LPFILETIME pft) FileTimeToSystemTime(&ft, pst); } - - void TimeFunctions::EpdTimeToFileTime(INT32 t, LPFILETIME pft, bool isMK2) //MK3 + + /// + /// converts MK2/MK3 time to FileTime + /// + /// UTC + /// UTC + /// + void TimeFunctions::EpdTimeToFileTime(UINT32 epdTime, LPFILETIME epdFileTime, bool isMK2) //MK3 { - ULONG64 ll = (ULONG64)t * (ULONG64)10000000; + ULONG64 ll = (ULONG64)epdTime * (ULONG64)10000000; if (isMK2) ll += (ULONG64) 116444736000000000; else ll += (ULONG64)125911584000000000; // 2000 base - 1601-1-1 (FT) Base - pft->dwLowDateTime = (DWORD)(ll & 0xffffffff); - pft->dwHighDateTime = ll >> 32; + epdFileTime->dwLowDateTime = (DWORD)(ll & 0xffffffff); + epdFileTime->dwHighDateTime = ll >> 32; } void TimeFunctions::FileTimeToEpdTime(FILETIME pft, INT32* t, bool isMK2) { - LONGLONG offset; - if (isMK2) offset = 116444736000000000; else offset = 125911584000000000; + ULONG64 offset; + if (isMK2) offset = (ULONG64)116444736000000000; else offset = (ULONG64)125911584000000000; LONGLONG ll = ((((LONGLONG)pft.dwHighDateTime << 32) + pft.dwLowDateTime) - offset) / 10000000; *t = (DWORD)ll; } UINT32 TimeFunctions::NowToEpdTime(bool isMK2) { - LONGLONG offset; - if (isMK2) offset = 116444736000000000; else offset = 125911584000000000; + ULONG64 offset; + if (isMK2) offset = (ULONG64)116444736000000000; else offset = (ULONG64)125911584000000000; SYSTEMTIME t; - GetSystemTime(&t); + GetSystemTime(&t); // is UTC !! FILETIME ft; SystemTimeToFileTime((const SYSTEMTIME*)&t, &ft); LONGLONG ll = ((((LONGLONG)ft.dwHighDateTime << 32U) + ft.dwLowDateTime) - offset) / 10000000; return (DWORD)ll; } + + void TimeFunctions::EPD2PeakTimeToFiletime(DWORD EpdClock, DWORD EpdPeakTime, FILETIME* PeakFileTime) { if (EpdPeakTime != 0xCDCDCDCD) { UINT32 tm = EpdClock - EpdPeakTime; diff --git a/EpdBase3/TimeFunctions.h b/EpdBase3/TimeFunctions.h index c975640..073f6c4 100644 --- a/EpdBase3/TimeFunctions.h +++ b/EpdBase3/TimeFunctions.h @@ -8,7 +8,7 @@ public: TimeFunctions(); - static void EpdTimeToFileTime(INT32 t, LPFILETIME pft, bool isMK2); + static void EpdTimeToFileTime(UINT32 epdTime, LPFILETIME epdFileTime, bool isMK2); void FileTimeToEpdTime(FILETIME pft, INT32* t, bool isMK2); static UINT32 NowToEpdTime(bool isMK2); static void UnixTimeToFileTime(time_t t, LPFILETIME pft); diff --git a/eDosLocal/UpdateLocal.sql b/eDosLocal/UpdateLocal.sql index c83beb6..a7bc417 100644 --- a/eDosLocal/UpdateLocal.sql +++ b/eDosLocal/UpdateLocal.sql @@ -8,17 +8,18 @@ GO SET QUOTED_IDENTIFIER ON; GO - -ALTER TABLE [dbo].[Visit] ADD eDosBatteryWarning BIT; -ALTER TABLE [dbo].[Visit] ADD eDosDose07Warning BIT; -ALTER TABLE [dbo].[Visit] ADD eDosDose07Alarm BIT; -ALTER TABLE [dbo].[Visit] ADD eDosRate07Warning BIT; -ALTER TABLE [dbo].[Visit] ADD eDosRate07Alarm BIT; -ALTER TABLE [dbo].[Visit] ADD eDosDose10Warning BIT; -ALTER TABLE [dbo].[Visit] ADD eDosDose10Alarm BIT; -ALTER TABLE [dbo].[Visit] ADD eDosRate10Warning BIT; -ALTER TABLE [dbo].[Visit] ADD eDosRate10Alarm BIT; - +IF NOT EXISTS (SELECT * FROM sys.columns WHERE OBJECT_ID=OBJECT_ID('dbo.visit') AND name='eDosBatteryWarning') +begin +ALTER TABLE [dbo].[Visit] ADD eDosBatteryWarning BIT null; +ALTER TABLE [dbo].[Visit] ADD eDosDose07Warning BIT null; +ALTER TABLE [dbo].[Visit] ADD eDosDose07Alarm BIT null; +ALTER TABLE [dbo].[Visit] ADD eDosRate07Warning BIT null; +ALTER TABLE [dbo].[Visit] ADD eDosRate07Alarm BIT null; +ALTER TABLE [dbo].[Visit] ADD eDosDose10Warning BIT null; +ALTER TABLE [dbo].[Visit] ADD eDosDose10Alarm BIT null; +ALTER TABLE [dbo].[Visit] ADD eDosRate10Warning BIT null; +ALTER TABLE [dbo].[Visit] ADD eDosRate10Alarm BIT null; +END GO ALTER PROCEDURE [dbo].[VisitExit] diff --git a/eDosStation/DataInterface.cs b/eDosStation/DataInterface.cs index ae4f330..ef6a26c 100644 --- a/eDosStation/DataInterface.cs +++ b/eDosStation/DataInterface.cs @@ -282,9 +282,17 @@ namespace eDosStation }); } - public void SetBoolParam(SqlCommand c , string pa, bool value) + public bool SetBoolParam(SqlCommand c, string pa, bool value) { - if (c.Parameters.Contains(pa))c.Parameters[pa].Value = value; + bool found = true; + if (c.Parameters.Contains(pa)) c.Parameters[pa].Value = value; + else + { + if (pa[0] != '@') pa = "@" + pa; else pa = pa.Substring(1); + if (c.Parameters.Contains(pa)) c.Parameters[pa].Value = value; + else found = false; + } + return found; } public void VisitExit(int EpdVisitID, EpdBaseClr.Epd2 ep) @@ -337,7 +345,6 @@ namespace eDosStation else VisitExitCommand.Parameters["PersID"].Value = DBNull.Value; - SetBoolParam(VisitExitCommand,"eDosBatteryWarning",ep.eDosBatteryWarning); SetBoolParam(VisitExitCommand, "eDosDose07Warning", ep.eDosDose07Warning); SetBoolParam(VisitExitCommand, "eDosDose07Alarm", ep.eDosDose07Alarm); @@ -385,20 +392,17 @@ namespace eDosStation } } - public User GetUser( string CSN, string Code) + public User GetUser( string CSN, string Code, bool isEntry) { User u = new User(); //object[] Values = null; try { - using (var cmd = new SqlCommand("GetPersonInfo", localConnection)) + using (var cmd = new SqlCommand("GetPersonInfo", localConnection) { CommandType = System.Data.CommandType.StoredProcedure } ) { - cmd.CommandType = System.Data.CommandType.StoredProcedure; if (int.TryParse(Code, out int PersID)) cmd.Parameters.AddWithValue("PersID", PersID); if (!string.IsNullOrEmpty(CSN)) cmd.Parameters.AddWithValue("csn", CSN); else cmd.Parameters.AddWithValue("csn", DBNull.Value); - - //if (!string.IsNullOrWhiteSpace(Code)) cmd.Parameters.AddWithValue("Badge", Code); checkCon(true); var rs = cmd.ExecuteReader(System.Data.CommandBehavior.SingleRow); using (var tb = new DataTable()) @@ -421,15 +425,14 @@ namespace eDosStation u.VisitIDLocked = dr["VisitIDLocked"] as int?; u.ReasonNoAccess = dr["ReasonNoAccess"].ToString().Replace("\\n", "\n"); u.UserComment = dr["Comment"].ToString(); - if (tb.Columns.Contains("hasEPD")) - u.hasEPD = (bool)dr["hasEPD"]; else u.hasEPD = false; - - - if (u.hasEPD) u.ReasonNoAccess = "EPD in use"; + if (isEntry && tb.Columns.Contains("hasEPD")) + { + u.hasEPD = (bool)dr["hasEPD"]; + if (u.hasEPD) u.ReasonNoAccess = "You have an EPD in use"; //!!! not for return !!!! + } + else u.hasEPD = false; u.activeVisit = dr["activeVisit"] as int?; - - u.AllOk = ( !CheckUser || (u.AccessAllow == true && u.VisitIDLocked == 0)); } else @@ -444,7 +447,8 @@ namespace eDosStation u.Margin = 0; u.VisitIDLocked = 0; u.ReasonNoAccess = "Not found"; - u.UserComment = ""; + u.UserComment = string.Empty; + u.hasEPD = false; u.AllOk = !CheckUser || (u.AccessAllow == true && u.VisitIDLocked == 0); } rs.Close(); diff --git a/eDosStation/EntryBadge.xaml.cs b/eDosStation/EntryBadge.xaml.cs index 2ab3ca9..a567913 100644 --- a/eDosStation/EntryBadge.xaml.cs +++ b/eDosStation/EntryBadge.xaml.cs @@ -473,7 +473,7 @@ namespace eDosStation } void CheckBadge() { - _User = dataInterface.GetUser(CSN.Text, Code.Text); + _User = dataInterface.GetUser(CSN.Text, Code.Text,true); #if DEBUG //_User.UserComment = "Hallo"; #endif @@ -643,9 +643,9 @@ namespace eDosStation Button b = sender as Button; string id = b.Tag.ToString().ToUpper(); if (id[0]=='P') - _User = dataInterface.GetUser(null, id.Substring(1)); + _User = dataInterface.GetUser(null, id.Substring(1),true); else - _User = dataInterface.GetUser("TP" + b.Tag.ToString().ToUpper(), string.Empty); + _User = dataInterface.GetUser("TP" + b.Tag.ToString().ToUpper(), string.Empty,true); Dispatcher.InvokeAsync(() => { ShowUserInfo(); }); dfReader?.WaitEnd(); diff --git a/eDosStation/EpdExit.xaml.cs b/eDosStation/EpdExit.xaml.cs index 5a83e29..a3d88ad 100644 --- a/eDosStation/EpdExit.xaml.cs +++ b/eDosStation/EpdExit.xaml.cs @@ -101,13 +101,13 @@ namespace eDosStation return; } -#if !DEBUG + if (int.TryParse(ep.WearerID, out EpdVisitID) && EpdVisitID % 100 != thisStation.ID_Station) { endWithMessage($"This EPD was issued on another station (ID:{EpdVisitID % 100})"); return; } -#endif + //bool NoTimeout = false; @@ -181,8 +181,8 @@ namespace eDosStation MessageBox.Show($"{ex.Message}"); ep = null; } - - Dispatcher.InvokeAsync(() => ep.Wait(thisStation.EPDTimeOut, thisStation.EPDRetries, thisStation.OnlyMK2), DispatcherPriority.Background); + if (ep!=null) + Dispatcher.InvokeAsync(() => ep.Wait(thisStation.EPDTimeOut, thisStation.EPDRetries, thisStation.OnlyMK2), DispatcherPriority.Background); } private void BCloseExit_Click(object sender, RoutedEventArgs e) diff --git a/eDosStation/Properties/AssemblyInfo.cs b/eDosStation/Properties/AssemblyInfo.cs index 5b6b308..de77dc5 100644 --- a/eDosStation/Properties/AssemblyInfo.cs +++ b/eDosStation/Properties/AssemblyInfo.cs @@ -51,5 +51,5 @@ using System.Windows; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("2.5.14.0")] -[assembly: AssemblyFileVersion("2.5.14.0")] +[assembly: AssemblyVersion("2.6.0.1")] +[assembly: AssemblyFileVersion("2.6.0.1")] diff --git a/eDosStation/Settings.xaml b/eDosStation/Settings.xaml index ec8585a..cf503fa 100644 --- a/eDosStation/Settings.xaml +++ b/eDosStation/Settings.xaml @@ -6,7 +6,7 @@ xmlns:local="clr-namespace:eDosStation" xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" mc:Ignorable="d" - Title="Settings" Height="464.627" Width="617.009" + Title="Settings" Height="448.033" Width="702.744" FontFamily="Segoe UI" FontSize="20" Loaded="Window_Loaded"> diff --git a/eDosStation/ShowEPDDose.xaml.cs b/eDosStation/ShowEPDDose.xaml.cs index 3ae98eb..479f646 100644 --- a/eDosStation/ShowEPDDose.xaml.cs +++ b/eDosStation/ShowEPDDose.xaml.cs @@ -119,7 +119,7 @@ namespace eDosStation { try { - thisUser = thisStation.dataInterface.GetUser(string.Empty, sPersID); + thisUser = thisStation.dataInterface.GetUser(string.Empty, sPersID,false); epdUserMargin.Text = thisUser.Margin.ToString(); } catch diff --git a/eDosStation/Station.cs b/eDosStation/Station.cs index 1c0c980..e9e1726 100644 --- a/eDosStation/Station.cs +++ b/eDosStation/Station.cs @@ -90,77 +90,96 @@ namespace eDosStation int rv = rs.GetValues(Values); ID_Station = (int)Values[rs.GetOrdinal("ID_Station")]; ComPort = (int)Values[rs.GetOrdinal("ComPort")]; - int c = rs.GetOrdinal("Inst_CODE1"); - if (rs.IsDBNull(c)) Inst_CODE1 = 0; else Inst_CODE1 = (int)Values[c]; - c = rs.GetOrdinal("Inst_CODE2"); - if (rs.IsDBNull(c)) Inst_CODE2 = 0; else Inst_CODE2 = (int)Values[c]; - c = rs.GetOrdinal("Inst_Name1"); - if (rs.IsDBNull(c)) Inst_Name1=string.Empty; else Inst_Name1 = Values[c].ToString(); - c = rs.GetOrdinal("Inst_Name2"); - if (rs.IsDBNull(c)) Inst_Name2 = string.Empty; else Inst_Name2 = Values[c].ToString(); - c = rs.GetOrdinal("TestCSN"); - if (rs.IsDBNull(c)) TestCSN = string.Empty; else TestCSN = Values[c].ToString(); - c = rs.GetOrdinal("Reader"); - if (rs.IsDBNull(c)) Reader = string.Empty; else Reader = Values[c].ToString(); - try - { - c = rs.GetOrdinal("useTestButtons"); - if (rs.IsDBNull(c)) useTestButtons = false; else useTestButtons = (bool)Values[c]; - } - catch { useTestButtons = false; } - try - { - c = rs.GetOrdinal("useBeep"); - if (rs.IsDBNull(c)) useBeep = 0b00010110; else useBeep = (byte)Values[c]; - } - catch { useBeep = 0b00010110; } + Inst_CODE1 = rs.IntOrDefault("Inst_CODE1", 0); + //int c = rs.GetOrdinal("Inst_CODE1"); + //if (rs.IsDBNull(c)) Inst_CODE1 = 0; else Inst_CODE1 = (int)Values[c]; + Inst_CODE2 = rs.IntOrDefault("Inst_CODE2", 0); + //c = rs.GetOrdinal("Inst_CODE2"); + //if (rs.IsDBNull(c)) Inst_CODE2 = 0; else Inst_CODE2 = (int)Values[c]; + Inst_Name1 = rs.StringOrDefault("Inst_Name1", string.Empty); + //c = rs.GetOrdinal("Inst_Name1"); + //if (rs.IsDBNull(c)) Inst_Name1=string.Empty; else Inst_Name1 = Values[c].ToString(); + Inst_Name2 = rs.StringOrDefault("Inst_Name2", string.Empty); + //c = rs.GetOrdinal("Inst_Name2"); + //if (rs.IsDBNull(c)) Inst_Name2 = string.Empty; else Inst_Name2 = Values[c].ToString(); + TestCSN = rs.StringOrDefault("TestCSN", string.Empty); + //c = rs.GetOrdinal("TestCSN"); + //if (rs.IsDBNull(c)) TestCSN = string.Empty; else TestCSN = Values[c].ToString(); + Reader = rs.StringOrDefault("Reader", string.Empty); + //c = rs.GetOrdinal("Reader"); + //if (rs.IsDBNull(c)) Reader = string.Empty; else Reader = Values[c].ToString(); - try - { - c = rs.GetOrdinal("doLog"); - if (rs.IsDBNull(c)) doLog = false; else doLog = (bool)Values[c]; - } - catch { useBeep = 0b00010110; } + useTestButtons = rs.BoolOrDefault("useTestButtons", false); + //try + //{ + // c = rs.GetOrdinal("useTestButtons"); + // if (rs.IsDBNull(c)) useTestButtons = false; else useTestButtons = (bool)Values[c]; + //} + //catch { useTestButtons = false; } + useBeep = rs.ByteOrDefault("useBeep", 0b00010110); + //try + //{ + // c = rs.GetOrdinal("useBeep"); + // if (rs.IsDBNull(c)) useBeep = 0b00010110; else useBeep = (byte)Values[c]; + //} + //catch { useBeep = 0b00010110; } - try - { - c = rs.GetOrdinal("checkUser"); - if (rs.IsDBNull(c)) checkUser = false; else checkUser= (bool)Values[c]; - } - catch { checkUser=false; } - try - { - c = rs.GetOrdinal("EPDTimeout"); - if (rs.IsDBNull(c)) EPDTimeOut = 10000; else EPDTimeOut= (int)Values[c]; - } - catch { EPDTimeOut= 10000; } - try - { - c = rs.GetOrdinal("EPDRetries"); - if (rs.IsDBNull(c)) EPDRetries = 2; else EPDRetries = (int)Values[c]; - } - catch { EPDRetries = 2; } - try - { - c = rs.GetOrdinal("RestartCom"); - if (rs.IsDBNull(c)) RestartCom= false; else RestartCom = (bool)Values[c]; - } - catch { EPDRetries = 2; } + doLog = rs.BoolOrDefault("doLog", false); + //try + //{ + // c = rs.GetOrdinal("doLog"); + // if (rs.IsDBNull(c)) doLog = false; else doLog = (bool)Values[c]; + //} + //catch { doLog = false; } - try - { - c = rs.GetOrdinal("RestartComFirst"); - if (rs.IsDBNull(c)) RestartComFirst = false; else RestartComFirst = (bool)Values[c]; - } - catch { RestartComFirst = false; } + checkUser = rs.BoolOrDefault("checkUser", false); + //try + //{ + // c = rs.GetOrdinal("checkUser"); + // if (rs.IsDBNull(c)) checkUser = false; else checkUser= (bool)Values[c]; + //} + //catch { checkUser=false; } - try - { - c = rs.GetOrdinal("OnlyMK2"); - if (rs.IsDBNull(c)) OnlyMK2 = false; else OnlyMK2= (bool)Values[c]; - } - catch { OnlyMK2 = false; } + EPDTimeOut = rs.IntOrDefault("EPDTimeout", 10000); + //try + //{ + // c = rs.GetOrdinal("EPDTimeout"); + // if (rs.IsDBNull(c)) EPDTimeOut = 10000; else EPDTimeOut= (int)Values[c]; + //} + //catch { EPDTimeOut= 10000; } + + EPDRetries = rs.IntOrDefault("EPDRetries", 2); + //try + //{ + // c = rs.GetOrdinal("EPDRetries"); + // if (rs.IsDBNull(c)) EPDRetries = 2; else EPDRetries = (int)Values[c]; + //} + //catch { EPDRetries = 2; } + + RestartCom = rs.BoolOrDefault("RestartCom", false); + //try + //{ + // c = rs.GetOrdinal("RestartCom"); + // if (rs.IsDBNull(c)) RestartCom= false; else RestartCom = (bool)Values[c]; + //} + //catch { EPDRetries = 2; } + + RestartComFirst = rs.BoolOrDefault("RestartComFirst", false); + //try + //{ + // c = rs.GetOrdinal("RestartComFirst"); + // if (rs.IsDBNull(c)) RestartComFirst = false; else RestartComFirst = (bool)Values[c]; + //} + //catch { RestartComFirst = false; } + + OnlyMK2 = rs.BoolOrDefault("OnlyMK2", false); + //try + //{ + // c = rs.GetOrdinal("OnlyMK2"); + // if (rs.IsDBNull(c)) OnlyMK2 = false; else OnlyMK2= (bool)Values[c]; + //} + //catch { OnlyMK2 = false; } } else @@ -259,6 +278,7 @@ namespace eDosStation cmd.SetIfExists("RestartCom", RestartCom); cmd.SetIfExists("RestartComFirst", RestartComFirst); cmd.SetIfExists("OnlyMK2", OnlyMK2); + cmd.SetIfExists("useTestButtons", useTestButtons); } catch (System.Exception ex) { diff --git a/eDosStation/extensions.cs b/eDosStation/extensions.cs index d547170..c20798b 100644 --- a/eDosStation/extensions.cs +++ b/eDosStation/extensions.cs @@ -3,12 +3,12 @@ static public class extensions { - static public bool SetIfExists(this System.Data.SqlClient.SqlCommand cmd, string paramname, object value) { bool rv = true; if (value == null) value = DBNull.Value; - string p1 = "@" + paramname; + string p1; + if (paramname[0] != '@') p1 = "@" + paramname; else {p1 = paramname; paramname = paramname.Substring(1); } if (cmd.Parameters.Contains(p1)) cmd.Parameters[p1].Value = value; else if (cmd.Parameters.Contains(paramname)) @@ -16,5 +16,52 @@ static public class extensions else rv = false; return rv; } + + public static bool BoolOrDefault( this System.Data.SqlClient.SqlDataReader rs, string colName, bool defaultValue) + { + bool rv = defaultValue; + try + { + int c = rs.GetOrdinal(colName); + if (!rs.IsDBNull(c)) rv = rs.GetBoolean(c); + } + catch { rv = defaultValue; } + return rv; + } + + public static byte ByteOrDefault(this System.Data.SqlClient.SqlDataReader rs, string colName, byte defaultValue) + { + byte rv = defaultValue; + try + { + int c = rs.GetOrdinal(colName); + if (!rs.IsDBNull(c)) rv = rs.GetByte(c); + } + catch { rv = defaultValue; } + return rv; + } + + public static int IntOrDefault(this System.Data.SqlClient.SqlDataReader rs, string colName, int defaultValue) + { + int rv = defaultValue; + try + { + int c = rs.GetOrdinal(colName); + if (!rs.IsDBNull(c)) rv = rs.GetInt32(c); + } + catch { rv = defaultValue; } + return rv; + } + public static string StringOrDefault(this System.Data.SqlClient.SqlDataReader rs, string colName, string defaultValue) + { + string rv = defaultValue; + try + { + int c = rs.GetOrdinal(colName); + if (!rs.IsDBNull(c)) rv = rs.GetString(c); + } + catch { rv = defaultValue; } + return rv; + } } diff --git a/syncEdosLocal/Program.cs b/syncEdosLocal/Program.cs index 581c5b9..b8510f2 100644 --- a/syncEdosLocal/Program.cs +++ b/syncEdosLocal/Program.cs @@ -35,20 +35,20 @@ namespace syncEdosLocal private void MakeCmd(SqlConnection co) { - cmd = new SqlCommand("syncLoc.SyncStatusUpdate",co); - cmd.CommandType = CommandType.StoredProcedure; - SqlParameter pa = new SqlParameter("ID_Station", SqlDbType.Int, 4); cmd.Parameters.Add(pa); - pa = new SqlParameter("TimeStamp", SqlDbType.DateTime, 4); cmd.Parameters.Add(pa); - pa = new SqlParameter("New", SqlDbType.Int, 4); cmd.Parameters.Add(pa); - pa = new SqlParameter("Entries", SqlDbType.Int, 4); cmd.Parameters.Add(pa); - pa = new SqlParameter("Exits", SqlDbType.Int, 4); cmd.Parameters.Add(pa); - pa = new SqlParameter("Skipped", SqlDbType.Int, 4); cmd.Parameters.Add(pa); - pa = new SqlParameter("ErrorMessage", SqlDbType.VarChar, 512); cmd.Parameters.Add(pa); - pa = new SqlParameter("ID_Visit_Min", SqlDbType.Int, 4); cmd.Parameters.Add(pa); - pa = new SqlParameter("ID_Visit_Max", SqlDbType.Int, 4); cmd.Parameters.Add(pa); - pa = new SqlParameter("Persons", SqlDbType.Int, 4); cmd.Parameters.Add(pa); - pa = new SqlParameter("Tasks", SqlDbType.Int, 4); cmd.Parameters.Add(pa); - + cmd = new System.Data.SqlClient.SqlCommand("[syncLoc].[SyncStatusUpdate]", co) { CommandType = System.Data.CommandType.StoredProcedure }; + cmd.Parameters.AddRange(new System.Data.SqlClient.SqlParameter[] { + new System.Data.SqlClient.SqlParameter("ID_Station",SqlDbType.Int,0,System.Data.ParameterDirection.Input,false,0,0,null,System.Data.DataRowVersion.Default,null) + ,new System.Data.SqlClient.SqlParameter("TimeStamp",SqlDbType.DateTime,0,System.Data.ParameterDirection.Input,false,0,0,null,System.Data.DataRowVersion.Default,null) + ,new System.Data.SqlClient.SqlParameter("New",SqlDbType.Int,0,System.Data.ParameterDirection.Input,false,0,0,null,System.Data.DataRowVersion.Default,null) + ,new System.Data.SqlClient.SqlParameter("Entries",SqlDbType.Int,0,System.Data.ParameterDirection.Input,false,0,0,null,System.Data.DataRowVersion.Default,null) + ,new System.Data.SqlClient.SqlParameter("Exits",SqlDbType.Int,0,System.Data.ParameterDirection.Input,false,0,0,null,System.Data.DataRowVersion.Default,null) + ,new System.Data.SqlClient.SqlParameter("Skipped",SqlDbType.Int,0,System.Data.ParameterDirection.Input,false,0,0,null,System.Data.DataRowVersion.Default,null) + ,new System.Data.SqlClient.SqlParameter("ErrorMessage",SqlDbType.VarChar,512,System.Data.ParameterDirection.Input,false,0,0,null,System.Data.DataRowVersion.Default,null) + ,new System.Data.SqlClient.SqlParameter("ID_Visit_Min",SqlDbType.Int,0,System.Data.ParameterDirection.Input,false,0,0,null,System.Data.DataRowVersion.Default,null) + ,new System.Data.SqlClient.SqlParameter("ID_Visit_Max",SqlDbType.Int,0,System.Data.ParameterDirection.Input,false,0,0,null,System.Data.DataRowVersion.Default,null) + ,new System.Data.SqlClient.SqlParameter("Persons",SqlDbType.Int,0,System.Data.ParameterDirection.Input,false,0,0,null,System.Data.DataRowVersion.Default,null) + ,new System.Data.SqlClient.SqlParameter("Tasks",SqlDbType.Int,0,System.Data.ParameterDirection.Input,false,0,0,null,System.Data.DataRowVersion.Default,null) + }); } public void Write( ) @@ -397,7 +397,6 @@ namespace syncEdosLocal if (cr == null) { Result.VisitsNew++; - copyrow(lr, ds.CentralVisits); if ((lr.VisitStatus & 1) > 0) { lr.syncedEntry = true; Result.VisitsAddedEntries++;} if ((lr.VisitStatus & 2) > 0) { lr.syncedExit = true; Result.VisitsAddedExits++; } @@ -470,7 +469,8 @@ namespace syncEdosLocal private static DataSet1.CentralVisitsRow copyrow(DataSet1.LocalVisitsRow lr, DataSet1.CentralVisitsDataTable centralVisits) { DataSet1.CentralVisitsRow cr = centralVisits.NewCentralVisitsRow(); - foreach (DataColumn sc in lr.Table.Columns) cr[sc.ColumnName] = lr[sc.ColumnName]; + foreach (DataColumn sc in lr.Table.Columns) + if (lr.Table.Columns.Contains(sc.ColumnName) ) cr[sc.ColumnName] = lr[sc.ColumnName]; centralVisits.AddCentralVisitsRow(cr); return cr; } diff --git a/syncEdosLocal/syncEdosLocal.csproj b/syncEdosLocal/syncEdosLocal.csproj index 6a1e319..2c9c5df 100644 --- a/syncEdosLocal/syncEdosLocal.csproj +++ b/syncEdosLocal/syncEdosLocal.csproj @@ -35,6 +35,7 @@ TRACE prompt 4 + false