Esempio n. 1
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="accDoc"></param>
        /// <param name="accountRow"></param>
        /// <param name="config"></param>
        private void StoreCustomer(AccountDocument accDoc, AccountDataset.AccountsRow accountRow, NorthwindConfig config, ref List<TransactionResult> result)
        {
            #region declaration
            AccountDataset.CustomersRow customerRow;
            AccountDataset account;
            CustomersTableAdapter tableAdapter;
            string columnName;
            int recordCount;
            bool newCustomer;
            string customerId;
            #endregion

            newCustomer = ((accDoc.Id == null) || (accDoc.Id == ""));

            try
            {
                if (newCustomer)
                    customerId = GetNewCustomerID((string)accDoc.name.Value, config);
                else if (accDoc.Id.StartsWith(Constants.CustomerIdPrefix, StringComparison.InvariantCultureIgnoreCase))
                    customerId = accDoc.Id.Substring(Constants.CustomerIdPrefix.Length);
                else
                {
                    result.Add(accDoc.SetTransactionStatus(TransactionStatus.UnRecoverableError, Resources.ErrorMessages_AccountNotFound));
                    return;
                }
            }
            catch (Exception)
            {
                result.Add(accDoc.SetTransactionStatus(TransactionStatus.UnRecoverableError, Resources.ErrorMessages_AccountNotFound));
                return;
            }
            try
            {

                using (OleDbConnection connection = new OleDbConnection(config.ConnectionString))
                {
                    account = new AccountDataset();

                    tableAdapter = new CustomersTableAdapter();
                    tableAdapter.Connection = connection;
                    if (newCustomer)
                    {
                        customerRow = account.Customers.NewCustomersRow();
                        customerRow.CustomerID = customerId;
                    }
                    else
                    {
                        recordCount = tableAdapter.FillBy(account.Customers, customerId);
                        if (recordCount == 0)
                        {
                            accDoc.SetTransactionStatus(TransactionStatus.UnRecoverableError, Resources.ErrorMessages_AccountNotFound);
                            return;
                        }
                        customerRow = (AccountDataset.CustomersRow)account.Customers.Rows[0];

                    }

                    for (int index = 0; index < accountRow.Table.Columns.Count; index++)
                    {

                        columnName = accountRow.Table.Columns[index].ColumnName;

                        if (!customerRow.Table.Columns.Contains(columnName))
                            continue;

                        if (columnName.StartsWith("Create", StringComparison.InvariantCultureIgnoreCase))
                            if ((accountRow[columnName].GetType().Equals(typeof(DBNull))))
                                continue;

                        customerRow[columnName] = accountRow[columnName];
                    }

                    if (newCustomer)
                        account.Customers.AddCustomersRow(customerRow);

                    tableAdapter.Update(account.Customers);
                    accDoc.SetTransactionStatus(TransactionStatus.Success);

                    SetIdentitiesForAccounts(Constants.CustomerIdPrefix + customerId, accDoc);
                    accDoc.GetTransactionResult(ref result);
                }
            }
            catch (Exception addCustomerException)
            {
                result.Add(accDoc.SetTransactionStatus(TransactionStatus.FatalError, addCustomerException.ToString()));
                throw;
            }

            UpdateEmailsCollectionFromCustomer(customerId, accDoc.emails, config, ref result);
        }
Esempio n. 2
0
        private void StoreSupplier(AccountDocument accDoc, AccountDataset.AccountsRow accountRow, NorthwindConfig config, ref List<TransactionResult> result)
        {
            AccountDataset.SuppliersRow suppliersRow;
            AccountDataset account;
            SuppliersTableAdapter tableAdapter;
            string columnName;
            int recordCount;
            bool newSupplier = ((accDoc.Id == null) || (accDoc.Id == ""));

            int supplierId;

            if (newSupplier)
                supplierId = 0;
            else if (accDoc.Id.StartsWith(Constants.SupplierIdPrefix, StringComparison.InvariantCultureIgnoreCase))
                try
                {
                    supplierId = Convert.ToInt32(accDoc.Id.Substring(Constants.SupplierIdPrefix.Length));
                }
                catch (Exception)
                { supplierId = 0; }
            else
            {
                accDoc.SetTransactionStatus(TransactionStatus.UnRecoverableError, Resources.ErrorMessages_AccountNotFound);
                return;
            }

            try
            {
                using (OleDbConnection connection = new OleDbConnection(config.ConnectionString))
                {

                        connection.Open();
                        account = new AccountDataset();

                        tableAdapter = new SuppliersTableAdapter();
                        tableAdapter.Connection = connection;
                        if (newSupplier)
                            suppliersRow = account.Suppliers.NewSuppliersRow();
                        else
                        {
                            recordCount = tableAdapter.FillBy(account.Suppliers, supplierId);
                            if (recordCount == 0)
                            {
                                accDoc.SetTransactionStatus(TransactionStatus.UnRecoverableError, Resources.ErrorMessages_AccountNotFound);
                                return;
                            }
                            suppliersRow = (AccountDataset.SuppliersRow)account.Suppliers.Rows[0];

                        }

                        for (int index = 0; index < accountRow.Table.Columns.Count; index++)
                        {

                            columnName = accountRow.Table.Columns[index].ColumnName;

                            if (!suppliersRow.Table.Columns.Contains(columnName))
                                continue;

                            suppliersRow[columnName] = accountRow[columnName];
                        }

                        if (newSupplier)
                            account.Suppliers.AddSuppliersRow(suppliersRow);

                        tableAdapter.Update(account.Suppliers);

                        if (newSupplier)
                        {
                            OleDbCommand Cmd = new OleDbCommand("SELECT @@IDENTITY", connection);

                            object lastid = Cmd.ExecuteScalar();
                            supplierId = (int)lastid;
                        }

                        accDoc.SetTransactionStatus(TransactionStatus.Success);

                        SetIdentitiesForAccounts(Constants.SupplierIdPrefix + supplierId.ToString(), accDoc);
                        accDoc.GetTransactionResult(ref result);

                }
            }
            catch (Exception addCustomerException)
            {
                accDoc.SetTransactionStatus(TransactionStatus.FatalError, addCustomerException.ToString());
                throw;
            }
        }