////////////////////////////////////////////////////
        public override IDbCommand GetInsertCommand(CStructureTable structure, bool bDisableIdAuto, IDbDataAdapter adapter)
        {
            bool bGestionAutoId = true;
            CMySqlDatabaseConnexion conMySql = m_connexion as CMySqlDatabaseConnexion;
            if (conMySql != null && structure.ChampsId.Length == 1 && structure.ChampsId[0].IsAutoId)
                conMySql.GetNomSequenceColAuto(structure.NomTableInDb, structure.ChampsId[0].NomChamp, ref bGestionAutoId);
            //Stef 2804 : N'exclue pas les champs exclus de l'insertion !

            IDbCommand command = m_cacheRequetes.GetCache(structure.NomTable, ETypeRequete.Insert);
            if (command == null)
            {
                string strReq = "insert into " + structure.NomTableInDb + "(";
                string strValues = "(";
                foreach (CInfoChampTable champ in structure.Champs)
                {
                    if ((!champ.IsAutoId || bDisableIdAuto || !bGestionAutoId))
                        if (champ.TypeDonnee != typeof(CDonneeBinaireInRow) && !champ.TypeDonnee.IsSubclassOf(typeof(CDonneeBinaireInRow)))
                        {
                            strReq += champ.NomChamp + ",";
                            strValues += GetNomParametreFor(champ, DataRowVersion.Current) + ",";
                        }
                }
                strReq = strReq.Substring(0, strReq.Length - 1) + ")";
                strValues = strValues.Substring(0, strValues.Length - 1) + ")";
                strReq += " values " + strValues;

                command = m_connexion.GetConnexion().CreateCommand();
                command.CommandText = strReq;
                //Ajoute les paramètres
                foreach (CInfoChampTable champ in structure.Champs)
                {
                    if ((!champ.IsAutoId || bDisableIdAuto || !bGestionAutoId))
                        if (champ.TypeDonnee != typeof(CDonneeBinaireInRow) && !champ.TypeDonnee.IsSubclassOf(typeof(CDonneeBinaireInRow)))
                        {
                            command.Parameters.Add(GetParametreFor(command, champ, DataRowVersion.Current, ParameterDirection.Input));
                        }
                }
                m_cacheRequetes.SetCache(structure.NomTable, ETypeRequete.Insert, command);
            }


            if (structure.HasChampIdAuto)
            {
                C2iMySqlDataAdapter MySqlAdapter = C2iMySqlDataAdapter.GetMySqlDataAdapter(adapter);
                if (MySqlAdapter != null && !bDisableIdAuto)
                    MySqlAdapter.PreparerInsertionLigneAvecAutoID(structure.NomTableInDb, structure.ChampsId[0].NomChamp);
            }
            command.Connection = m_connexion.GetConnexion();
            command.CommandType = CommandType.Text;
            command.Transaction = m_connexion.Transaction;
            command.UpdatedRowSource = UpdateRowSource.FirstReturnedRecord;

            return command;

        }
Пример #2
0
        ////////////////////////////////////////////////////
        public override IDbCommand GetInsertCommand(DataTable table, IDbDataAdapter adapter, bool bDisableIdsAuto)
        {
            DataColumn[] cols       = table.PrimaryKey;
            string       strChampId = null;

            if (cols != null && cols.Length == 1)
            {
                if (cols[0].AutoIncrement)
                {
                    strChampId = cols[0].ColumnName;
                }
            }

            MySqlCommandBuilder builder      = new MySqlCommandBuilder((MySqlDataAdapter)adapter);
            bool bAvecTriggerMajAuto         = true;
            CMySqlDatabaseConnexion conMySql = m_connexion as CMySqlDatabaseConnexion;

            if (conMySql != null)
            {
                if (strChampId != null)
                {
                    conMySql.GetNomSequenceColAuto(table.TableName, strChampId, ref bAvecTriggerMajAuto);
                }
            }
            if (strChampId != null && !bAvecTriggerMajAuto)
            {
                table.Columns[strChampId].AutoIncrement = false;
            }

            MySqlCommand cmdInsert = builder.GetInsertCommand();

            if (strChampId != null && !bAvecTriggerMajAuto)
            {
                table.Columns[strChampId].AutoIncrement = true;
            }
            if (m_connexion.IsInTrans())
            {
                cmdInsert.Transaction = (MySqlTransaction)m_connexion.Transaction;
            }
            if (strChampId != null)
            {
                C2iMySqlDataAdapter MySqlAdapter = C2iMySqlDataAdapter.GetMySqlDataAdapter(adapter);
                if (MySqlAdapter != null && !bDisableIdsAuto)
                {
                    MySqlAdapter.PreparerInsertionLigneAvecAutoID(table.TableName, strChampId);
                }

                cmdInsert.UpdatedRowSource = UpdateRowSource.Both;
            }

            return(cmdInsert);
        }
Пример #3
0
        /// /////////////////////////////////////////////////////////////////
        public void PreparerInsertionLigneAvecAutoID(string nomTableInDb, string champIDAuto)
        {
            bool   bAvecTrigger = false;
            string strSequence  = m_encapsuleurConnexion.GetNomSequenceColAuto(nomTableInDb, champIDAuto, ref bAvecTrigger);

            if (bAvecTrigger)
            {
                m_strRqtSelectionNewRowIDAvecTrigger = "SELECT " + strSequence + ".CURRVAL from DUAL";
                m_strRqtSelectionNewRowIDSansTrigger = "";
            }
            else
            {
                m_strRqtSelectionNewRowIDAvecTrigger = "";
                m_strRqtSelectionNewRowIDSansTrigger = "SELECT " + strSequence + ".NEXTVAL from DUAL";;
            }

            m_champIDAuto = champIDAuto;
        }