public static bool IsSQLConnection(String strTableName) { if ((DataStructureProvider.IsSystemTable(strTableName) && DataQueryProvider.IsSystemSQLConnection) || (DataStructureProvider.IsSystemTable(strTableName) == false && DataQueryProvider.IsCompanySQLConnection)) { return(true); } return(false); }
public int GetMaxNoIndex(string tableName) { if (DataStructureProvider.IsTableColumn(tableName, "NoIndex") == false) { return(-1); } Database db = CurrentDatabase; if (CurrentDatabase == null) { if (DataStructureProvider.IsSystemTable(tableName)) { db = DataQueryProvider.SystemDatabase; } else { db = DataQueryProvider.CompanyDatabase; } } DbCommand cmd = null; if (MaxIndexCommandList.TryGetValue(tableName, out cmd) == false) { String sqlCommand = String.Format("SELECT Max(NoIndex) FROM [{0}]", tableName); cmd = db.GetSqlStringCommand(sqlCommand); MaxIndexCommandList.Add(tableName, cmd); } DataSet ds = db.ExecuteDataSet(cmd); if (ds != null && ds.Tables.Count > 0) { if (ds.Tables[0].Rows[0][0] == System.DBNull.Value) { return(0); } else { return(Convert.ToInt32(ds.Tables[0].Rows[0][0])); } } return(-1); }
public static void Synchronize(STDataServerSyncsInfo syncInfo) { if (!syncInfo.FK_STDataServerID.HasValue) { return; } if (!syncInfo.IsPull && !syncInfo.IsPush) { return; } if (syncInfo.LastSyncDate.HasValue && syncInfo.IntervalMinute.HasValue && (DateTime.Now < syncInfo.LastSyncDate.Value || DateTime.Now.Subtract(syncInfo.LastSyncDate.Value).TotalMinutes < syncInfo.IntervalMinute.Value)) { return; } STDataServersController serverCtrl = new STDataServersController(); STDataServersInfo server = serverCtrl.GetObjectByID(syncInfo.FK_STDataServerID.Value) as STDataServersInfo; if (server == null) { return; } DBConnectionController connection = null; if (DataStructureProvider.IsSystemTable(syncInfo.TableName)) { connection = InitSystemConnection(server.STDataServerID); } else { connection = InitCompanyConnection(server.STDataServerID); } if (connection != null) { using (System.Transactions.TransactionScope scope = new System.Transactions.TransactionScope()) { String strRunQuery = @"SET XACT_ABORT ON;BEGIN TRANSACTION ABCSYNC; "; String strQuery = String.Empty; if (syncInfo.IsPush) { if (syncInfo.IsPushMatched) { #region Delete strQuery = String.Format(@"DELETE [{0}].[{1}].[dbo].[{2}] WHERE [{3}] NOT IN (SELECT [{3}] FROM [dbo].[{2}] )", server.Name, connection.Connection.DatabaseName, syncInfo.TableName, DataStructureProvider.GetPrimaryKeyColumn(syncInfo.TableName)); strRunQuery = String.Format(@"{0} {1}", strRunQuery, Environment.NewLine + strQuery); #endregion } #region Insert New Records strQuery = QueryGenerator.GenSelect(syncInfo.TableName, DataStructureProvider.GetPrimaryKeyColumn(syncInfo.TableName), false, false); if (syncInfo.LastSyncDate.HasValue && DataStructureProvider.IsTableColumn(syncInfo.TableName, ABCCommon.ABCConstString.colCreateTime)) { strQuery = QueryGenerator.AddCondition(strQuery, String.Format("{0} > '{1}'", ABCCommon.ABCConstString.colCreateTime, syncInfo.LastSyncDate.Value.ToString("yyyy-MM-dd HH:mm:ss"))); } strQuery = String.Format(@"INSERT INTO [{0}].[{1}].[dbo].[{2}] SELECT * FROM [dbo].[{2}] WHERE [dbo].[{2}].[{3}] IN ({4}) AND [dbo].[{2}].[{3}] NOT IN (SELECT {3} FROM [{0}].[{1}].[dbo].[{2}])", server.Name, connection.Connection.DatabaseName, syncInfo.TableName, DataStructureProvider.GetPrimaryKeyColumn(syncInfo.TableName), strQuery); strRunQuery = String.Format(@"{0} {1}", strRunQuery, Environment.NewLine + strQuery); #endregion #region Update Modified Records strQuery = QueryGenerator.GenSelect(syncInfo.TableName, DataStructureProvider.GetPrimaryKeyColumn(syncInfo.TableName), false, false); if (syncInfo.LastSyncDate.HasValue && DataStructureProvider.IsTableColumn(syncInfo.TableName, ABCCommon.ABCConstString.colUpdateTime)) { strQuery = QueryGenerator.AddCondition(strQuery, String.Format("{0} > '{1}'", ABCCommon.ABCConstString.colUpdateTime, syncInfo.LastSyncDate.Value.ToString("yyyy-MM-dd HH:mm:ss"))); } strQuery = String.Format(@"UPDATE [{0}].[{1}].[dbo].[{2}] SET #FIELD# FROM [{0}].[{1}].[dbo].[{2}] Target,[dbo].[{2}] Source WHERE Target.[{3}]=Source.[{3}] AND Source.[{3}] IN ({4}) AND Source.[{3}] IN (SELECT {3} FROM [{0}].[{1}].[dbo].[{2}])", server.Name, connection.Connection.DatabaseName, syncInfo.TableName, DataStructureProvider.GetPrimaryKeyColumn(syncInfo.TableName), strQuery); List <String> lstSetFields = new List <string>(); foreach (String strField in DataStructureProvider.GetAllTableColumns(syncInfo.TableName).Keys) { if (DataStructureProvider.IsPrimaryKey(syncInfo.TableName, strField) == false) { lstSetFields.Add(String.Format(" [{0}]=Source.[{0}] ", strField)); } } strQuery = strQuery.Replace("#FIELD#", String.Join(",", lstSetFields)); strRunQuery = String.Format(@"{0} {1}", strRunQuery, Environment.NewLine + strQuery); #endregion } if (syncInfo.IsPull) { if (syncInfo.IsPullMatched) { #region Delete strQuery = String.Format(@"DELETE [dbo].[{2}] WHERE [{3}] NOT IN (SELECT [{3}] FROM [{0}].[{1}].[dbo].[{2}] )", server.Name, connection.Connection.DatabaseName, syncInfo.TableName, DataStructureProvider.GetPrimaryKeyColumn(syncInfo.TableName)); strRunQuery = String.Format(@"{0} {1}", strRunQuery, Environment.NewLine + strQuery); #endregion } #region Insert New Records strQuery = QueryGenerator.GenSelect(syncInfo.TableName, DataStructureProvider.GetPrimaryKeyColumn(syncInfo.TableName), false, false); if (syncInfo.LastSyncDate.HasValue && DataStructureProvider.IsTableColumn(syncInfo.TableName, ABCCommon.ABCConstString.colCreateTime)) { strQuery = QueryGenerator.AddCondition(strQuery, String.Format("{0} > '{1}'", ABCCommon.ABCConstString.colCreateTime, syncInfo.LastSyncDate.Value.ToString("yyyy-MM-dd HH:mm:ss"))); } strQuery = strQuery.Replace("[dbo]", String.Format(@"[{0}].[{1}].[dbo]", server.Name, connection.Connection.DatabaseName)); strQuery = String.Format(@"INSERT INTO [dbo].[{2}] SELECT * FROM [{0}].[{1}].[dbo].[{2}] WHERE [{3}] IN ({4}) AND [{3}] NOT IN (SELECT {3} FROM [dbo].[{2}])", server.Name, connection.Connection.DatabaseName, syncInfo.TableName, DataStructureProvider.GetPrimaryKeyColumn(syncInfo.TableName), strQuery); strRunQuery = String.Format(@"{0} {1}", strRunQuery, Environment.NewLine + strQuery); #endregion #region Update Modified Records strQuery = QueryGenerator.GenSelect(syncInfo.TableName, DataStructureProvider.GetPrimaryKeyColumn(syncInfo.TableName), false, false); if (syncInfo.LastSyncDate.HasValue && DataStructureProvider.IsTableColumn(syncInfo.TableName, ABCCommon.ABCConstString.colUpdateTime)) { strQuery = QueryGenerator.AddCondition(strQuery, String.Format("{0} > '{1}'", ABCCommon.ABCConstString.colUpdateTime, syncInfo.LastSyncDate.Value.ToString("yyyy-MM-dd HH:mm:ss"))); } strQuery = strQuery.Replace("[dbo]", String.Format(@"[{0}].[{1}].[dbo]", server.Name, connection.Connection.DatabaseName)); strQuery = String.Format(@"UPDATE [dbo].[{2}] SET #FIELD# FROM [dbo].[{2}] Target,[{0}].[{1}].[dbo].[{2}] Source WHERE Target.[{3}]=Source.[{3}] AND Source.[{3}] IN ({4}) AND Source.[{3}] IN (SELECT {3} FROM [dbo].[{2}])", server.Name, connection.Connection.DatabaseName, syncInfo.TableName, DataStructureProvider.GetPrimaryKeyColumn(syncInfo.TableName), strQuery); List <String> lstSetFields = new List <string>(); foreach (String strField in DataStructureProvider.GetAllTableColumns(syncInfo.TableName).Keys) { if (DataStructureProvider.IsPrimaryKey(syncInfo.TableName, strField) == false) { lstSetFields.Add(String.Format(" [{0}]=Source.[{0}] ", strField)); } } strQuery = strQuery.Replace("#FIELD#", String.Join(",", lstSetFields)); strRunQuery = String.Format(@"{0} {1}", strRunQuery, Environment.NewLine + strQuery); #endregion } strRunQuery = String.Format(@"{0} COMMIT TRANSACTION ABCSYNC; SET XACT_ABORT OFF;", strRunQuery + Environment.NewLine); BusinessObjectController.RunQuery(strRunQuery, syncInfo.TableName); BusinessObjectController.RunQuery(String.Format(@"UPDATE STDataServerSyncs SET LastSyncDate =GetDate() WHERE STDataServerSyncID='{0}'", syncInfo.GetID()), syncInfo.AATableName); scope.Complete(); } } }