-//
-// Mono.Data.Sqlite.SQLiteParameterCollection.cs
-//
-// Author(s):
-// Robert Simpson (robert@blackcastlesoft.com)
-//
-// Adapted and modified for the Mono Project by
-// Marek Habersack (grendello@gmail.com)
-//
-//
-// Copyright (C) 2006 Novell, Inc (http://www.novell.com)
-// Copyright (C) 2007 Marek Habersack
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-/********************************************************
- * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
- * Written by Robert Simpson (robert@blackcastlesoft.com)
- *
- * Released to the public domain, use at your own risk!
- ********************************************************/
-#if NET_2_0
-namespace Mono.Data.Sqlite
-{
- using System;
- using System.Data;
- using System.Data.Common;
- using System.Collections.Generic;
- using System.Globalization;
- using System.ComponentModel;
- using System.Reflection;
-
- /// <summary>
- /// Sqlite implementation of DbParameterCollection.
- /// </summary>
-#if !PLATFORM_COMPACTFRAMEWORK
- [Editor("Microsoft.VSDesigner.Data.Design.DBParametersEditor, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"), ListBindable(false)]
-#endif
- public class SqliteParameterCollection : DbParameterCollection
- {
- /// <summary>
- /// The underlying command to which this collection belongs
- /// </summary>
- private SqliteCommand _command;
- /// <summary>
- /// The internal array of parameters in this collection
- /// </summary>
- private List<SqliteParameter> _parameterList;
- /// <summary>
- /// Determines whether or not all parameters have been bound to their statement(s)
- /// </summary>
- private bool _unboundFlag;
-
- /// <summary>
- /// Initializes the collection
- /// </summary>
- /// <param name="cmd">The command to which the collection belongs</param>
- internal SqliteParameterCollection(SqliteCommand cmd)
- {
- _command = cmd;
- _parameterList = new List<SqliteParameter>();
- _unboundFlag = true;
- }
-
- /// <summary>
- /// Returns true
- /// </summary>
- public override bool IsSynchronized
- {
- get { return true; }
- }
-
- /// <summary>
- /// Returns false
- /// </summary>
- public override bool IsFixedSize
- {
- get { return false; }
- }
-
- /// <summary>
- /// Returns false
- /// </summary>
- public override bool IsReadOnly
- {
- get { return false; }
- }
-
- /// <summary>
- /// Returns null
- /// </summary>
- public override object SyncRoot
- {
- get { return null; }
- }
-
- /// <summary>
- /// Retrieves an enumerator for the collection
- /// </summary>
- /// <returns>An enumerator for the underlying array</returns>
- public override System.Collections.IEnumerator GetEnumerator()
- {
- return _parameterList.GetEnumerator();
- }
-
- /// <summary>
- /// Adds a parameter to the collection
- /// </summary>
- /// <param name="parameterName">The parameter name</param>
- /// <param name="parameterType">The data type</param>
- /// <param name="parameterSize">The size of the value</param>
- /// <param name="sourceColumn">The source column</param>
- /// <returns>A SqliteParameter object</returns>
- public SqliteParameter Add(string parameterName, DbType parameterType, int parameterSize, string sourceColumn)
- {
- SqliteParameter param = new SqliteParameter(parameterName, parameterType, parameterSize, sourceColumn);
- Add(param);
-
- return param;
- }
-
- /// <summary>
- /// Adds a parameter to the collection
- /// </summary>
- /// <param name="parameterName">The parameter name</param>
- /// <param name="parameterType">The data type</param>
- /// <param name="parameterSize">The size of the value</param>
- /// <returns>A SqliteParameter object</returns>
- public SqliteParameter Add(string parameterName, DbType parameterType, int parameterSize)
- {
- SqliteParameter param = new SqliteParameter(parameterName, parameterType, parameterSize);
- Add(param);
-
- return param;
- }
-
- /// <summary>
- /// Adds a parameter to the collection
- /// </summary>
- /// <param name="parameterName">The parameter name</param>
- /// <param name="parameterType">The data type</param>
- /// <returns>A SqliteParameter object</returns>
- public SqliteParameter Add(string parameterName, DbType parameterType)
- {
- SqliteParameter param = new SqliteParameter(parameterName, parameterType);
- Add(param);
-
- return param;
- }
-
- /// <summary>
- /// Adds a parameter to the collection
- /// </summary>
- /// <param name="parameter">The parameter to add</param>
- /// <returns>A zero-based index of where the parameter is located in the array</returns>
- public int Add(SqliteParameter parameter)
- {
- int n = -1;
-
- if (parameter.ParameterName != null)
- {
- n = IndexOf(parameter.ParameterName);
- }
-
- if (n == -1)
- {
- n = _parameterList.Count;
- _parameterList.Add((SqliteParameter)parameter);
- }
-
- SetParameter(n, parameter);
-
- return n;
- }
-
- /// <summary>
- /// Adds a parameter to the collection
- /// </summary>
- /// <param name="value">The parameter to add</param>
- /// <returns>A zero-based index of where the parameter is located in the array</returns>
-#if !PLATFORM_COMPACTFRAMEWORK
- [EditorBrowsable(EditorBrowsableState.Never)]
-#endif
- public override int Add(object value)
- {
- return Add((SqliteParameter)value);
- }
-
- /// <summary>
- /// Adds a named/unnamed parameter and its value to the parameter collection.
- /// </summary>
- /// <param name="parameterName">Name of the parameter, or null to indicate an unnamed parameter</param>
- /// <param name="value">The initial value of the parameter</param>
- /// <returns>Returns the SqliteParameter object created during the call.</returns>
- public SqliteParameter AddWithValue(string parameterName, object value)
- {
- SqliteParameter param = new SqliteParameter(parameterName, value);
- Add(param);
-
- return param;
- }
-
- /// <summary>
- /// Adds an array of parameters to the collection
- /// </summary>
- /// <param name="values">The array of parameters to add</param>
- public void AddRange(SqliteParameter[] values)
- {
- int x = values.Length;
- for (int n = 0; n < x; n++)
- Add(values[n]);
- }
-
- /// <summary>
- /// Adds an array of parameters to the collection
- /// </summary>
- /// <param name="values">The array of parameters to add</param>
- public override void AddRange(Array values)
- {
- int x = values.Length;
- for (int n = 0; n < x; n++)
- Add((SqliteParameter)(values.GetValue(n)));
- }
-
- /// <summary>
- /// Clears the array and resets the collection
- /// </summary>
- public override void Clear()
- {
- _unboundFlag = true;
- _parameterList.Clear();
- }
-
- /// <summary>
- /// Determines if the named parameter exists in the collection
- /// </summary>
- /// <param name="parameterName">The name of the parameter to check</param>
- /// <returns>True if the parameter is in the collection</returns>
- public override bool Contains(string parameterName)
- {
- return (IndexOf(parameterName) != -1);
- }
-
- /// <summary>
- /// Determines if the parameter exists in the collection
- /// </summary>
- /// <param name="value">The SqliteParameter to check</param>
- /// <returns>True if the parameter is in the collection</returns>
- public override bool Contains(object value)
- {
- return _parameterList.Contains((SqliteParameter)value);
- }
-
- /// <summary>
- /// Not implemented
- /// </summary>
- /// <param name="array"></param>
- /// <param name="index"></param>
- public override void CopyTo(Array array, int index)
- {
- throw new NotImplementedException();
- }
-
- /// <summary>
- /// Returns a count of parameters in the collection
- /// </summary>
- public override int Count
- {
- get { return _parameterList.Count; }
- }
-
- /// <summary>
- /// Overloaded to specialize the return value of the default indexer
- /// </summary>
- /// <param name="parameterName">Name of the parameter to get/set</param>
- /// <returns>The specified named Sqlite parameter</returns>
- public new SqliteParameter this[string parameterName]
- {
- get
- {
- return (SqliteParameter)GetParameter(parameterName);
- }
- set
- {
- SetParameter(parameterName, value);
- }
- }
-
- /// <summary>
- /// Overloaded to specialize the return value of the default indexer
- /// </summary>
- /// <param name="index">The index of the parameter to get/set</param>
- /// <returns>The specified Sqlite parameter</returns>
- public new SqliteParameter this[int index]
- {
- get
- {
- return (SqliteParameter)GetParameter(index);
- }
- set
- {
- SetParameter(index, value);
- }
- }
- /// <summary>
- /// Retrieve a parameter by name from the collection
- /// </summary>
- /// <param name="parameterName">The name of the parameter to fetch</param>
- /// <returns>A DbParameter object</returns>
- protected override DbParameter GetParameter(string parameterName)
- {
- return GetParameter(IndexOf(parameterName));
- }
-
- /// <summary>
- /// Retrieves a parameter by its index in the collection
- /// </summary>
- /// <param name="index">The index of the parameter to retrieve</param>
- /// <returns>A DbParameter object</returns>
- protected override DbParameter GetParameter(int index)
- {
- return _parameterList[index];
- }
-
- /// <summary>
- /// Returns the index of a parameter given its name
- /// </summary>
- /// <param name="parameterName">The name of the parameter to find</param>
- /// <returns>-1 if not found, otherwise a zero-based index of the parameter</returns>
- public override int IndexOf(string parameterName)
- {
- int x = _parameterList.Count;
- for (int n = 0; n < x; n++)
- {
- if (String.Compare(parameterName, _parameterList[n].ParameterName, true, CultureInfo.InvariantCulture) == 0)
- return n;
- }
- return -1;
- }
-
- /// <summary>
- /// Returns the index of a parameter
- /// </summary>
- /// <param name="value">The parameter to find</param>
- /// <returns>-1 if not found, otherwise a zero-based index of the parameter</returns>
- public override int IndexOf(object value)
- {
- return _parameterList.IndexOf((SqliteParameter)value);
- }
-
- /// <summary>
- /// Inserts a parameter into the array at the specified location
- /// </summary>
- /// <param name="index">The zero-based index to insert the parameter at</param>
- /// <param name="value">The parameter to insert</param>
- public override void Insert(int index, object value)
- {
- _unboundFlag = true;
- _parameterList.Insert(index, (SqliteParameter)value);
- }
-
- /// <summary>
- /// Removes a parameter from the collection
- /// </summary>
- /// <param name="value">The parameter to remove</param>
- public override void Remove(object value)
- {
- _unboundFlag = true;
- _parameterList.Remove((SqliteParameter)value);
- }
-
- /// <summary>
- /// Removes a parameter from the collection given its name
- /// </summary>
- /// <param name="parameterName">The name of the parameter to remove</param>
- public override void RemoveAt(string parameterName)
- {
- RemoveAt(IndexOf(parameterName));
- }
-
- /// <summary>
- /// Removes a parameter from the collection given its index
- /// </summary>
- /// <param name="index">The zero-based parameter index to remove</param>
- public override void RemoveAt(int index)
- {
- _unboundFlag = true;
- _parameterList.RemoveAt(index);
- }
-
- /// <summary>
- /// Re-assign the named parameter to a new parameter object
- /// </summary>
- /// <param name="parameterName">The name of the parameter to replace</param>
- /// <param name="value">The new parameter</param>
- protected override void SetParameter(string parameterName, DbParameter value)
- {
- SetParameter(IndexOf(parameterName), value);
- }
-
- /// <summary>
- /// Re-assign a parameter at the specified index
- /// </summary>
- /// <param name="index">The zero-based index of the parameter to replace</param>
- /// <param name="value">The new parameter</param>
- protected override void SetParameter(int index, DbParameter value)
- {
- _unboundFlag = true;
- _parameterList[index] = (SqliteParameter)value;
- }
-
- /// <summary>
- /// Un-binds all parameters from their statements
- /// </summary>
- internal void Unbind()
- {
- _unboundFlag = true;
- }
-
- /// <summary>
- /// This function attempts to map all parameters in the collection to all statements in a Command.
- /// Since named parameters may span multiple statements, this function makes sure all statements are bound
- /// to the same named parameter. Unnamed parameters are bound in sequence.
- /// </summary>
- internal void MapParameters(SqliteStatement activeStatement)
- {
- if (_unboundFlag == false || _parameterList.Count == 0 || _command._statementList == null) return;
-
- int nUnnamed = 0;
- string s;
- int n;
- int y = -1;
- SqliteStatement stmt;
-
- foreach(SqliteParameter p in _parameterList)
- {
- y ++;
- s = p.ParameterName;
- if (s == null)
- {
- s = String.Format(CultureInfo.InvariantCulture, ";{0}", nUnnamed);
- nUnnamed++;
- }
-
- int x;
- bool isMapped = false;
-
- if (activeStatement == null)
- x = _command._statementList.Count;
- else
- x = 1;
-
- stmt = activeStatement;
- for (n = 0; n < x; n++)
- {
- isMapped = false;
- if (stmt == null) stmt = _command._statementList[n];
- if (stmt._paramNames != null)
- {
- if (stmt.MapParameter(s, p) == true)
- isMapped = true;
- }
- stmt = null;
- }
-
- // If the parameter has a name, but the SQL statement uses unnamed references, this can happen -- attempt to map
- // the parameter by its index in the collection
- if (isMapped == false)
- {
- s = String.Format(CultureInfo.InvariantCulture, ";{0}", y);
-
- stmt = activeStatement;
- for (n = 0; n < x; n++)
- {
- if (stmt == null) stmt = _command._statementList[n];
- if (stmt._paramNames != null)
- {
- if (stmt.MapParameter(s, p) == true)
- isMapped = true;
- }
- stmt = null;
- }
- }
- }
- if (activeStatement == null) _unboundFlag = false;
- }
- }
-}
-#endif
+/********************************************************\r
+ * ADO.NET 2.0 Data Provider for SQLite Version 3.X\r
+ * Written by Robert Simpson (robert@blackcastlesoft.com)\r
+ * \r
+ * Released to the public domain, use at your own risk!\r
+ ********************************************************/\r
+\r
+namespace Mono.Data.Sqlite\r
+{\r
+ using System;\r
+ using System.Data;\r
+ using System.Data.Common;\r
+ using System.Collections.Generic;\r
+ using System.Globalization;\r
+ using System.ComponentModel;\r
+ using System.Reflection;\r
+\r
+ /// <summary>\r
+ /// SQLite implementation of DbParameterCollection.\r
+ /// </summary>\r
+#if !PLATFORM_COMPACTFRAMEWORK\r
+ [Editor("Microsoft.VSDesigner.Data.Design.DBParametersEditor, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"), ListBindable(false)]\r
+#endif\r
+ public sealed class SqliteParameterCollection : DbParameterCollection\r
+ {\r
+ /// <summary>\r
+ /// The underlying command to which this collection belongs\r
+ /// </summary>\r
+ private SqliteCommand _command;\r
+ /// <summary>\r
+ /// The internal array of parameters in this collection\r
+ /// </summary>\r
+ private List<SqliteParameter> _parameterList;\r
+ /// <summary>\r
+ /// Determines whether or not all parameters have been bound to their statement(s)\r
+ /// </summary>\r
+ private bool _unboundFlag;\r
+\r
+ /// <summary>\r
+ /// Initializes the collection\r
+ /// </summary>\r
+ /// <param name="cmd">The command to which the collection belongs</param>\r
+ internal SqliteParameterCollection(SqliteCommand cmd)\r
+ {\r
+ _command = cmd;\r
+ _parameterList = new List<SqliteParameter>();\r
+ _unboundFlag = true;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Returns true\r
+ /// </summary>\r
+ public override bool IsSynchronized\r
+ {\r
+ get { return true; }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Returns false\r
+ /// </summary>\r
+ public override bool IsFixedSize\r
+ {\r
+ get { return false; }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Returns false\r
+ /// </summary>\r
+ public override bool IsReadOnly\r
+ {\r
+ get { return false; }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Returns null\r
+ /// </summary>\r
+ public override object SyncRoot\r
+ {\r
+ get { return null; }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Retrieves an enumerator for the collection\r
+ /// </summary>\r
+ /// <returns>An enumerator for the underlying array</returns>\r
+ public override System.Collections.IEnumerator GetEnumerator()\r
+ {\r
+ return _parameterList.GetEnumerator();\r
+ }\r
+\r
+ /// <summary>\r
+ /// Adds a parameter to the collection\r
+ /// </summary>\r
+ /// <param name="parameterName">The parameter name</param>\r
+ /// <param name="parameterType">The data type</param>\r
+ /// <param name="parameterSize">The size of the value</param>\r
+ /// <param name="sourceColumn">The source column</param>\r
+ /// <returns>A SqliteParameter object</returns>\r
+ public SqliteParameter Add(string parameterName, DbType parameterType, int parameterSize, string sourceColumn)\r
+ {\r
+ SqliteParameter param = new SqliteParameter(parameterName, parameterType, parameterSize, sourceColumn);\r
+ Add(param);\r
+\r
+ return param;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Adds a parameter to the collection\r
+ /// </summary>\r
+ /// <param name="parameterName">The parameter name</param>\r
+ /// <param name="parameterType">The data type</param>\r
+ /// <param name="parameterSize">The size of the value</param>\r
+ /// <returns>A SqliteParameter object</returns>\r
+ public SqliteParameter Add(string parameterName, DbType parameterType, int parameterSize)\r
+ {\r
+ SqliteParameter param = new SqliteParameter(parameterName, parameterType, parameterSize);\r
+ Add(param);\r
+\r
+ return param;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Adds a parameter to the collection\r
+ /// </summary>\r
+ /// <param name="parameterName">The parameter name</param>\r
+ /// <param name="parameterType">The data type</param>\r
+ /// <returns>A SqliteParameter object</returns>\r
+ public SqliteParameter Add(string parameterName, DbType parameterType)\r
+ {\r
+ SqliteParameter param = new SqliteParameter(parameterName, parameterType);\r
+ Add(param);\r
+\r
+ return param;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Adds a parameter to the collection\r
+ /// </summary>\r
+ /// <param name="parameter">The parameter to add</param>\r
+ /// <returns>A zero-based index of where the parameter is located in the array</returns>\r
+ public int Add(SqliteParameter parameter)\r
+ {\r
+ int n = -1;\r
+\r
+ if (String.IsNullOrEmpty(parameter.ParameterName) == false)\r
+ {\r
+ n = IndexOf(parameter.ParameterName);\r
+ }\r
+\r
+ if (n == -1)\r
+ {\r
+ n = _parameterList.Count;\r
+ _parameterList.Add((SqliteParameter)parameter);\r
+ }\r
+\r
+ SetParameter(n, parameter);\r
+\r
+ return n;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Adds a parameter to the collection\r
+ /// </summary>\r
+ /// <param name="value">The parameter to add</param>\r
+ /// <returns>A zero-based index of where the parameter is located in the array</returns>\r
+#if !PLATFORM_COMPACTFRAMEWORK\r
+ [EditorBrowsable(EditorBrowsableState.Never)]\r
+#endif\r
+ public override int Add(object value)\r
+ {\r
+ return Add((SqliteParameter)value);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Adds a named/unnamed parameter and its value to the parameter collection.\r
+ /// </summary>\r
+ /// <param name="parameterName">Name of the parameter, or null to indicate an unnamed parameter</param>\r
+ /// <param name="value">The initial value of the parameter</param>\r
+ /// <returns>Returns the SqliteParameter object created during the call.</returns>\r
+ public SqliteParameter AddWithValue(string parameterName, object value)\r
+ {\r
+ SqliteParameter param = new SqliteParameter(parameterName, value);\r
+ Add(param);\r
+\r
+ return param;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Adds an array of parameters to the collection\r
+ /// </summary>\r
+ /// <param name="values">The array of parameters to add</param>\r
+ public void AddRange(SqliteParameter[] values)\r
+ {\r
+ int x = values.Length;\r
+ for (int n = 0; n < x; n++)\r
+ Add(values[n]);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Adds an array of parameters to the collection\r
+ /// </summary>\r
+ /// <param name="values">The array of parameters to add</param>\r
+ public override void AddRange(Array values)\r
+ {\r
+ int x = values.Length;\r
+ for (int n = 0; n < x; n++)\r
+ Add((SqliteParameter)(values.GetValue(n)));\r
+ }\r
+\r
+ /// <summary>\r
+ /// Clears the array and resets the collection\r
+ /// </summary>\r
+ public override void Clear()\r
+ {\r
+ _unboundFlag = true;\r
+ _parameterList.Clear();\r
+ }\r
+\r
+ /// <summary>\r
+ /// Determines if the named parameter exists in the collection\r
+ /// </summary>\r
+ /// <param name="parameterName">The name of the parameter to check</param>\r
+ /// <returns>True if the parameter is in the collection</returns>\r
+ public override bool Contains(string parameterName)\r
+ {\r
+ return (IndexOf(parameterName) != -1);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Determines if the parameter exists in the collection\r
+ /// </summary>\r
+ /// <param name="value">The SqliteParameter to check</param>\r
+ /// <returns>True if the parameter is in the collection</returns>\r
+ public override bool Contains(object value)\r
+ {\r
+ return _parameterList.Contains((SqliteParameter)value);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Not implemented\r
+ /// </summary>\r
+ /// <param name="array"></param>\r
+ /// <param name="index"></param>\r
+ public override void CopyTo(Array array, int index)\r
+ {\r
+ throw new NotImplementedException();\r
+ }\r
+\r
+ /// <summary>\r
+ /// Returns a count of parameters in the collection\r
+ /// </summary>\r
+ public override int Count\r
+ {\r
+ get { return _parameterList.Count; }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Overloaded to specialize the return value of the default indexer\r
+ /// </summary>\r
+ /// <param name="parameterName">Name of the parameter to get/set</param>\r
+ /// <returns>The specified named SQLite parameter</returns>\r
+ public new SqliteParameter this[string parameterName]\r
+ {\r
+ get\r
+ {\r
+ return (SqliteParameter)GetParameter(parameterName);\r
+ }\r
+ set\r
+ {\r
+ SetParameter(parameterName, value);\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Overloaded to specialize the return value of the default indexer\r
+ /// </summary>\r
+ /// <param name="index">The index of the parameter to get/set</param>\r
+ /// <returns>The specified SQLite parameter</returns>\r
+ public new SqliteParameter this[int index]\r
+ {\r
+ get\r
+ {\r
+ return (SqliteParameter)GetParameter(index);\r
+ }\r
+ set\r
+ {\r
+ SetParameter(index, value);\r
+ }\r
+ }\r
+ /// <summary>\r
+ /// Retrieve a parameter by name from the collection\r
+ /// </summary>\r
+ /// <param name="parameterName">The name of the parameter to fetch</param>\r
+ /// <returns>A DbParameter object</returns>\r
+ protected override DbParameter GetParameter(string parameterName)\r
+ {\r
+ return GetParameter(IndexOf(parameterName));\r
+ }\r
+\r
+ /// <summary>\r
+ /// Retrieves a parameter by its index in the collection\r
+ /// </summary>\r
+ /// <param name="index">The index of the parameter to retrieve</param>\r
+ /// <returns>A DbParameter object</returns>\r
+ protected override DbParameter GetParameter(int index)\r
+ {\r
+ return _parameterList[index];\r
+ }\r
+\r
+ /// <summary>\r
+ /// Returns the index of a parameter given its name\r
+ /// </summary>\r
+ /// <param name="parameterName">The name of the parameter to find</param>\r
+ /// <returns>-1 if not found, otherwise a zero-based index of the parameter</returns>\r
+ public override int IndexOf(string parameterName)\r
+ {\r
+ int x = _parameterList.Count;\r
+ for (int n = 0; n < x; n++)\r
+ {\r
+ if (String.Compare(parameterName, _parameterList[n].ParameterName, true, CultureInfo.InvariantCulture) == 0)\r
+ return n;\r
+ }\r
+ return -1;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Returns the index of a parameter\r
+ /// </summary>\r
+ /// <param name="value">The parameter to find</param>\r
+ /// <returns>-1 if not found, otherwise a zero-based index of the parameter</returns>\r
+ public override int IndexOf(object value)\r
+ {\r
+ return _parameterList.IndexOf((SqliteParameter)value);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Inserts a parameter into the array at the specified location\r
+ /// </summary>\r
+ /// <param name="index">The zero-based index to insert the parameter at</param>\r
+ /// <param name="value">The parameter to insert</param>\r
+ public override void Insert(int index, object value)\r
+ {\r
+ _unboundFlag = true;\r
+ _parameterList.Insert(index, (SqliteParameter)value);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Removes a parameter from the collection\r
+ /// </summary>\r
+ /// <param name="value">The parameter to remove</param>\r
+ public override void Remove(object value)\r
+ {\r
+ _unboundFlag = true;\r
+ _parameterList.Remove((SqliteParameter)value);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Removes a parameter from the collection given its name\r
+ /// </summary>\r
+ /// <param name="parameterName">The name of the parameter to remove</param>\r
+ public override void RemoveAt(string parameterName)\r
+ {\r
+ RemoveAt(IndexOf(parameterName));\r
+ }\r
+\r
+ /// <summary>\r
+ /// Removes a parameter from the collection given its index\r
+ /// </summary>\r
+ /// <param name="index">The zero-based parameter index to remove</param>\r
+ public override void RemoveAt(int index)\r
+ {\r
+ _unboundFlag = true;\r
+ _parameterList.RemoveAt(index);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Re-assign the named parameter to a new parameter object\r
+ /// </summary>\r
+ /// <param name="parameterName">The name of the parameter to replace</param>\r
+ /// <param name="value">The new parameter</param>\r
+ protected override void SetParameter(string parameterName, DbParameter value)\r
+ {\r
+ SetParameter(IndexOf(parameterName), value);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Re-assign a parameter at the specified index\r
+ /// </summary>\r
+ /// <param name="index">The zero-based index of the parameter to replace</param>\r
+ /// <param name="value">The new parameter</param>\r
+ protected override void SetParameter(int index, DbParameter value)\r
+ {\r
+ _unboundFlag = true;\r
+ _parameterList[index] = (SqliteParameter)value;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Un-binds all parameters from their statements\r
+ /// </summary>\r
+ internal void Unbind()\r
+ {\r
+ _unboundFlag = true;\r
+ }\r
+\r
+ /// <summary>\r
+ /// This function attempts to map all parameters in the collection to all statements in a Command.\r
+ /// Since named parameters may span multiple statements, this function makes sure all statements are bound\r
+ /// to the same named parameter. Unnamed parameters are bound in sequence.\r
+ /// </summary>\r
+ internal void MapParameters(SqliteStatement activeStatement)\r
+ {\r
+ if (_unboundFlag == false || _parameterList.Count == 0 || _command._statementList == null) return;\r
+\r
+ int nUnnamed = 0;\r
+ string s;\r
+ int n;\r
+ int y = -1;\r
+ SqliteStatement stmt;\r
+\r
+ foreach(SqliteParameter p in _parameterList)\r
+ {\r
+ y ++;\r
+ s = p.ParameterName;\r
+ if (s == null)\r
+ {\r
+ s = String.Format(CultureInfo.InvariantCulture, ";{0}", nUnnamed);\r
+ nUnnamed++;\r
+ }\r
+\r
+ int x;\r
+ bool isMapped = false;\r
+\r
+ if (activeStatement == null)\r
+ x = _command._statementList.Count;\r
+ else\r
+ x = 1;\r
+\r
+ stmt = activeStatement;\r
+ for (n = 0; n < x; n++)\r
+ {\r
+ isMapped = false;\r
+ if (stmt == null) stmt = _command._statementList[n];\r
+ if (stmt._paramNames != null)\r
+ {\r
+ if (stmt.MapParameter(s, p) == true)\r
+ isMapped = true;\r
+ }\r
+ stmt = null;\r
+ }\r
+\r
+ // If the parameter has a name, but the SQL statement uses unnamed references, this can happen -- attempt to map\r
+ // the parameter by its index in the collection\r
+ if (isMapped == false)\r
+ {\r
+ s = String.Format(CultureInfo.InvariantCulture, ";{0}", y);\r
+\r
+ stmt = activeStatement;\r
+ for (n = 0; n < x; n++)\r
+ {\r
+ if (stmt == null) stmt = _command._statementList[n];\r
+ if (stmt._paramNames != null)\r
+ {\r
+ if (stmt.MapParameter(s, p) == true)\r
+ isMapped = true;\r
+ }\r
+ stmt = null;\r
+ }\r
+ }\r
+ }\r
+ if (activeStatement == null) _unboundFlag = false;\r
+ }\r
+ }\r
+}\r