Example #1
0
        void RemoveUnusedParameters()
        {
            DbParameterCollection parameters = m_inner.Parameters;

            if (m_params == null)
            {
                Debug.Assert(parameters.Count == 0);
                return;
            }
            else if (parameters.Count == 0)
            {
                return;
            }
            else
            {
                Debug.Assert(m_params != null);
            }

            ParamPicker picker = new ParamPicker();

            m_statement.Traverse(picker);

            for (int i = parameters.Count - 1; i >= 0; --i)
            {
                DbParameter last = parameters[i];
                string      name = last.ParameterName;
                if ((name != null) && !name.Equals(""))
                {
                    if (!picker.IsParam(name))
                    {
                        parameters.Remove(last);
                    }
                }
            }
        }
Example #2
0
        public void BasicOperationsTest()
        {
            SqlCommand            command    = new SqlCommand();
            DbParameterCollection collection = command.Parameters;
            SqlParameter          firstParam = new SqlParameter();

            // Add
            int index = collection.Add(firstParam);

            Assert.Equal(0, index);

            // Get
            Assert.Same(firstParam, collection[index]);
            Assert.Equal(0, collection.IndexOf(firstParam));
            Assert.Equal(-1, collection.IndexOf(new SqlParameter()));
            Assert.Equal(-1, collection.IndexOf(null));

            // Insert
            SqlParameter secondParam = new SqlParameter();

            collection.Insert(0, secondParam);
            Assert.Same(secondParam, collection[0]);
            Assert.Same(firstParam, collection[1]);

            // Replace
            SqlParameter thirdParam = new SqlParameter();

            collection[1] = thirdParam;
            Assert.Same(thirdParam, collection[1]);

            // Remove
            collection.Remove(secondParam);
            Assert.Equal(1, collection.Count);
            Assert.Same(thirdParam, collection[0]);

            // Clear
            collection.Clear();
            Assert.Equal(0, collection.Count);
        }
 public override void Remove(object value)
 {
     list_params.Remove((UniParameter)value);
     m_parameters.Remove(value);
 }
Example #4
0
        void OrderParameters()
        {
            DbParameterCollection parameters = m_inner.Parameters;

            if (m_params == null)
            {
                Debug.Assert(parameters.Count == 0);
                return;
            }
            else if (parameters.Count == 0)
            {
                return;
            }
            else
            {
                Debug.Assert(m_params != null);
            }

            Dictionary <string, DbParameter> unique = new Dictionary <string, DbParameter>();

            while (parameters.Count > 0)
            {
                DbParameter last = parameters[parameters.Count - 1];
                if (last == null)
                {
                    throw new InvalidOperationException(
                              "DbParameterCollection has null parameter.");
                }

                string name = last.ParameterName;
                if (name == null)
                {
                    throw new Exception("Unnamed parameters can't be reordered.");
                }

                string key = Variable.Canonicalize(name);
                Debug.Assert(key != null);

                if (unique.ContainsKey(key))
                {
                    string message = string.Format("Duplicate variable name \"{0}\".",
                                                   key);
                    throw new InvalidOperationException(message);
                }

                unique.Add(key, last);
                parameters.Remove(last);
            }

            ParamGrower grower = new ParamGrower();

            m_statement.Traverse(grower);

            string[] embedded = grower.GetAllParams();
            if (embedded == null)
            {
                throw new InvalidOperationException(
                          "Parameters are specified but the command text doesn't use any.");
            }

            Dictionary <string, object> used = new Dictionary <string, object>();

            for (int i = 0; i < embedded.Length; ++i)
            {
                string      key     = Variable.Canonicalize(embedded[i]);
                DbParameter ordered = null;
                bool        first   = unique.ContainsKey(key);
                if (first)
                {
                    ordered = unique[key];
                    Debug.Assert(ordered != null);
                }
                else
                {
                    string origKey = grower.GetOriginalKey(embedded[i]);
                    if (origKey == null)
                    {
                        string message = string.Format("Unknown parameter name {0}.",
                                                       embedded[i]);
                        m_log.Warn(message);
                    }
                    else
                    {
                        ordered = m_inner.CreateParameter();
                        ordered.ParameterName = embedded[i];
                        ordered.Value         = used[origKey];
                    }
                }

                unique.Remove(key);

                if (ordered != null)
                {
                    parameters.Add(ordered);

                    if (first)
                    {
                        object v = ordered.Value;
                        if (v == null)
                        {
                            string message = string.Format("Parameter \"{0}\" has null value.",
                                                           ordered.ParameterName);
                            throw new Exception(message);
                        }

                        used.Add(key, v);
                    }
                }
            }
        }
 public override void Remove(object value)
 {
     _parameterCollection.Remove(value);
 }