Exemplo n.º 1
0
        public void AddParameterForObject(BusinessObject obj, DbCommand cmd)
        {
            Database db = CurrentDatabase;

            if (CurrentDatabase == null)
            {
                if (DataStructureProvider.IsQuerySystemDB(cmd.CommandText))
                {
                    db = DataQueryProvider.SystemDatabase;
                }
                else
                {
                    db = DataQueryProvider.CompanyDatabase;
                }
            }

            if (cmd.Parameters.Count == 0)
            {
                BusinessObjectHelper.InitPropertyList(obj.AATableName);
                foreach (PropertyInfo property in BusinessObjectHelper.PropertyList[obj.AATableName].Values)
                {
                    if (property.Name == DataStructureProvider.GetPrimaryKeyColumn(obj.AATableName) && cmd.CommandText.Contains("Insert"))
                    {
                        db.AddOutParameter(cmd, property.Name, DbType.Guid, 64);
                        //     AddOutParameter( cmd , property.Name , SqlDbType.Int , 8 );
                    }
                    else
                    {
                        object objValue = ABCBusinessEntities.ABCDynamicInvoker.GetValue(obj, property);
                        if (DataStructureProvider.IsForeignKey(obj.AATableName, property.Name))
                        {
                            if (objValue == null || ABCHelper.DataConverter.ConvertToGuid(objValue) == Guid.Empty)
                            {
                                objValue = DBNull.Value;
                            }
                        }

                        if (objValue == null)
                        {
                            objValue = DBNull.Value;
                        }

                        AddInParameter(cmd, property, objValue);
                    }
                }
            }
            else
            {
                foreach (DbParameter param in cmd.Parameters)
                {
                    if (param.Direction == ParameterDirection.Input)
                    {
                        String strFieldName = param.ParameterName.Replace("@", "");

                        object objValue = ABCBusinessEntities.ABCDynamicInvoker.GetValue(obj, strFieldName);
                        if (DataStructureProvider.IsForeignKey(obj.AATableName, strFieldName))
                        {
                            if (objValue == null || ABCHelper.DataConverter.ConvertToGuid(objValue) == Guid.Empty)
                            {
                                objValue = DBNull.Value;
                            }
                        }

                        if (objValue == null)
                        {
                            objValue = DBNull.Value;
                        }

                        if (param.Value != objValue && objValue.ToString() != param.Value.ToString())
                        {
                            db.SetParameterValue(cmd, param.ParameterName, objValue);
                        }
                    }
                }
            }
        }