@@ -68,6 +68,8 @@ public MySqlParameter AddWithValue(string parameterName, object? value)
6868
6969 public override void Clear ( )
7070 {
71+ foreach ( var parameter in m_parameters )
72+ parameter . ParameterCollection = null ;
7173 m_parameters . Clear ( ) ;
7274 m_nameToIndex . Clear ( ) ;
7375 }
@@ -113,6 +115,7 @@ public override void RemoveAt(int index)
113115 var oldParameter = m_parameters [ index ] ;
114116 if ( oldParameter . NormalizedParameterName is object )
115117 m_nameToIndex . Remove ( oldParameter . NormalizedParameterName ) ;
118+ oldParameter . ParameterCollection = null ;
116119 m_parameters . RemoveAt ( index ) ;
117120
118121 foreach ( var pair in m_nameToIndex . ToList ( ) )
@@ -130,9 +133,11 @@ protected override void SetParameter(int index, DbParameter value)
130133 var oldParameter = m_parameters [ index ] ;
131134 if ( oldParameter . NormalizedParameterName is object )
132135 m_nameToIndex . Remove ( oldParameter . NormalizedParameterName ) ;
136+ oldParameter . ParameterCollection = null ;
133137 m_parameters [ index ] = newParameter ;
134138 if ( newParameter . NormalizedParameterName is object )
135139 m_nameToIndex . Add ( newParameter . NormalizedParameterName , index ) ;
140+ newParameter . ParameterCollection = this ;
136141 }
137142
138143 protected override void SetParameter ( string parameterName , DbParameter value ) => SetParameter ( IndexOf ( parameterName ) , value ) ;
@@ -153,13 +158,29 @@ protected override void SetParameter(int index, DbParameter value)
153158 set => SetParameter ( name , value ) ;
154159 }
155160
161+ internal void ChangeParameterName ( MySqlParameter parameter , string oldName , string newName )
162+ {
163+ if ( m_nameToIndex . TryGetValue ( oldName , out var index ) && m_parameters [ index ] == parameter )
164+ m_nameToIndex . Remove ( oldName ) ;
165+ else
166+ index = m_parameters . IndexOf ( parameter ) ;
167+
168+ if ( newName . Length != 0 )
169+ {
170+ if ( m_nameToIndex . ContainsKey ( newName ) )
171+ throw new MySqlException ( @"There is already a parameter with the name '{0}' in this collection." . FormatInvariant ( parameter . ParameterName ) ) ;
172+ m_nameToIndex [ newName ] = index ;
173+ }
174+ }
175+
156176 private void AddParameter ( MySqlParameter parameter )
157177 {
158178 if ( ! string . IsNullOrEmpty ( parameter . NormalizedParameterName ) && NormalizedIndexOf ( parameter . NormalizedParameterName ) != - 1 )
159179 throw new MySqlException ( @"Parameter '{0}' has already been defined." . FormatInvariant ( parameter . ParameterName ) ) ;
160180 m_parameters . Add ( parameter ) ;
161181 if ( ! string . IsNullOrEmpty ( parameter . NormalizedParameterName ) )
162182 m_nameToIndex [ parameter . NormalizedParameterName ] = m_parameters . Count - 1 ;
183+ parameter . ParameterCollection = this ;
163184 }
164185
165186 readonly List < MySqlParameter > m_parameters ;
0 commit comments