private void BindParameters3(IntPtr pStmt) { if (sql_params == null) { return; } if (sql_params.Count == 0) { return; } int pcount = Sqlite3.BindParameterCount(pStmt); var _replaces = "@?:$".ToCharArray(); for (int i = 1; i <= pcount; i++) { var name = Sqlite3.BindParameterName(pStmt, i); foreach (var _replace in _replaces) { name = name.Replace(_replace.ToString(), ""); } SqliteParameter param = null; if (name != null) { param = sql_params[name] as SqliteParameter; } else { param = sql_params[i - 1] as SqliteParameter; } if (param.Value == null) { Sqlite3.BindNull(pStmt, i); continue; } Type ptype = param.Value.GetType(); #if WINDOWS_PHONE_APP if (ptype.GetTypeInfo().IsEnum) #else if (ptype.IsEnum) #endif { ptype = Enum.GetUnderlyingType(ptype); } SqliteError err; if (ptype.Equals(typeof(String))) { String s = (String)param.Value; err = (SqliteError)Sqlite3.BindText(pStmt, i, s, -1, IntPtr.Zero); } else if (ptype.Equals(typeof(DBNull))) { err = (SqliteError)Sqlite3.BindNull(pStmt, i); } else if (ptype.Equals(typeof(Boolean))) { bool b = (bool)param.Value; err = (SqliteError)Sqlite3.BindInt(pStmt, i, b ? 1 : 0); } else if (ptype.Equals(typeof(Byte))) { err = (SqliteError)Sqlite3.BindInt(pStmt, i, (Byte)param.Value); } else if (ptype.Equals(typeof(Char))) { err = (SqliteError)Sqlite3.BindInt(pStmt, i, (Char)param.Value); } #if WINDOWS_PHONE_APP else if (ptype.GetTypeInfo().IsEnum) #else else if (ptype.IsEnum) #endif { err = (SqliteError)Sqlite3.BindInt(pStmt, i, (Int32)param.Value); } else if (ptype.Equals(typeof(Int16))) { err = (SqliteError)Sqlite3.BindInt(pStmt, i, (Int16)param.Value); } else if (ptype.Equals(typeof(Int32))) { err = (SqliteError)Sqlite3.BindInt(pStmt, i, (Int32)param.Value); } else if (ptype.Equals(typeof(SByte))) { err = (SqliteError)Sqlite3.BindInt(pStmt, i, (SByte)param.Value); } else if (ptype.Equals(typeof(UInt16))) { err = (SqliteError)Sqlite3.BindInt(pStmt, i, (UInt16)param.Value); } else if (ptype.Equals(typeof(DateTime))) { DateTime dt = (DateTime)param.Value; err = (SqliteError)Sqlite3.BindText(pStmt, i, dt.ToString("yyyy-MM-dd HH:mm:ss"), -1, IntPtr.Zero); } else if (ptype.Equals(typeof(Decimal))) { err = (SqliteError)Sqlite3.BindDouble(pStmt, i, Decimal.ToDouble((Decimal)param.Value)); } else if (ptype.Equals(typeof(Double))) { err = (SqliteError)Sqlite3.BindDouble(pStmt, i, (Double)param.Value); } else if (ptype.Equals(typeof(Single))) { err = (SqliteError)Sqlite3.BindDouble(pStmt, i, (Single)param.Value); } else if (ptype.Equals(typeof(UInt32))) { err = (SqliteError)Sqlite3.BindInt64(pStmt, i, (UInt32)param.Value); } else if (ptype.Equals(typeof(Int64))) { err = (SqliteError)Sqlite3.BindInt64(pStmt, i, (Int64)param.Value); } else if (ptype.Equals(typeof(Byte[]))) { err = (SqliteError)Sqlite3.BindBlob(pStmt, i, (byte[])param.Value, ((byte[])param.Value).Length, IntPtr.Zero); } else if (ptype.Equals(typeof(Guid))) { err = (SqliteError)Sqlite3.BindText(pStmt, i, param.Value.ToString(), param.Value.ToString().Length, IntPtr.Zero); } else { throw new ApplicationException("Unkown Parameter Type"); } if (err != SqliteError.OK) { throw new ApplicationException("Sqlite error in bind " + err); } } }