Mercurial > pub > bltoolkit
comparison Source/Data/DataProvider/MonoSqliteDataProvider.cs @ 0:f990fcb411a9
Копия текущей версии из github
| author | cin |
|---|---|
| date | Thu, 27 Mar 2014 21:46:09 +0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:f990fcb411a9 |
|---|---|
| 1 using System; | |
| 2 using System.Data; | |
| 3 using System.Data.Common; | |
| 4 using System.Diagnostics; | |
| 5 using System.Text; | |
| 6 using System.Xml; | |
| 7 | |
| 8 // System.Data.SQLite.dll must be referenced. | |
| 9 // http://sqlite.phxsoftware.com/ | |
| 10 // | |
| 11 using Mono.Data.Sqlite; | |
| 12 | |
| 13 namespace BLToolkit.Data.DataProvider | |
| 14 { | |
| 15 /// <summary> | |
| 16 /// Implements access to the Data Provider for SQLite. | |
| 17 /// </summary> | |
| 18 /// <remarks> | |
| 19 /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example. | |
| 20 /// </remarks> | |
| 21 /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataManager Method</seealso> | |
| 22 public sealed class SQLiteDataProvider: DataProviderBase | |
| 23 { | |
| 24 /// <summary> | |
| 25 /// Creates the database connection object. | |
| 26 /// </summary> | |
| 27 /// <remarks> | |
| 28 /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example. | |
| 29 /// </remarks> | |
| 30 /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataManager Method</seealso> | |
| 31 /// <returns>The database connection object.</returns> | |
| 32 public override IDbConnection CreateConnectionObject() | |
| 33 { | |
| 34 return new SqliteConnection(); | |
| 35 } | |
| 36 | |
| 37 /// <summary> | |
| 38 /// Creates the data adapter object. | |
| 39 /// </summary> | |
| 40 /// <remarks> | |
| 41 /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example. | |
| 42 /// </remarks> | |
| 43 /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataManager Method</seealso> | |
| 44 /// <returns>A data adapter object.</returns> | |
| 45 public override DbDataAdapter CreateDataAdapterObject() | |
| 46 { | |
| 47 return new SqliteDataAdapter(); | |
| 48 } | |
| 49 | |
| 50 /// <summary> | |
| 51 /// Populates the specified IDbCommand object's Parameters collection with | |
| 52 /// parameter information for the stored procedure specified in the IDbCommand. | |
| 53 /// </summary> | |
| 54 /// <remarks> | |
| 55 /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example. | |
| 56 /// </remarks> | |
| 57 /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataManager Method</seealso> | |
| 58 /// <param name="command">The IDbCommand referencing the stored procedure for which the parameter information is to be derived. The derived parameters will be populated into the Parameters of this command.</param> | |
| 59 public override bool DeriveParameters(IDbCommand command) | |
| 60 { | |
| 61 // SQLiteCommandBuilder does not implement DeriveParameters. | |
| 62 // This is not surprising, since SQLite has no support for stored procs. | |
| 63 // | |
| 64 return false; | |
| 65 } | |
| 66 | |
| 67 public override object Convert(object value, ConvertType convertType) | |
| 68 { | |
| 69 switch (convertType) | |
| 70 { | |
| 71 case ConvertType.NameToQueryParameter: | |
| 72 case ConvertType.NameToParameter: | |
| 73 return "@" + value; | |
| 74 | |
| 75 case ConvertType.NameToQueryField: | |
| 76 case ConvertType.NameToQueryTable: | |
| 77 { | |
| 78 string name = (string)value; | |
| 79 | |
| 80 if (name.Length > 0 && name[0] == '[') | |
| 81 return value; | |
| 82 | |
| 83 if (name.IndexOf('.') > 0) | |
| 84 value = string.Join("].[", name.Split('.')); | |
| 85 | |
| 86 return "[" + value + "]"; | |
| 87 } | |
| 88 | |
| 89 case ConvertType.ParameterToName: | |
| 90 { | |
| 91 string name = (string)value; | |
| 92 return name.Length > 0 && name[0] == '@'? name.Substring(1): name; | |
| 93 } | |
| 94 | |
| 95 case ConvertType.ExceptionToErrorNumber: | |
| 96 { | |
| 97 if (value is SqliteException) | |
| 98 return ((SqliteException)value).ErrorCode; | |
| 99 break; | |
| 100 } | |
| 101 } | |
| 102 | |
| 103 return value; | |
| 104 } | |
| 105 | |
| 106 public override void AttachParameter(IDbCommand command, IDbDataParameter parameter) | |
| 107 { | |
| 108 if (parameter.Direction == ParameterDirection.Input || parameter.Direction == ParameterDirection.InputOutput) | |
| 109 { | |
| 110 if (parameter.Value is XmlDocument) | |
| 111 { | |
| 112 parameter.Value = Encoding.UTF8.GetBytes(((XmlDocument) parameter.Value).InnerXml); | |
| 113 parameter.DbType = DbType.Binary; | |
| 114 } | |
| 115 } | |
| 116 | |
| 117 base.AttachParameter(command, parameter); | |
| 118 } | |
| 119 | |
| 120 /// <summary> | |
| 121 /// Returns connection type. | |
| 122 /// </summary> | |
| 123 /// <remarks> | |
| 124 /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example. | |
| 125 /// </remarks> | |
| 126 /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataManager Method</seealso> | |
| 127 /// <value>An instance of the <see cref="Type"/> class.</value> | |
| 128 public override Type ConnectionType | |
| 129 { | |
| 130 get { return typeof(SqliteConnection); } | |
| 131 } | |
| 132 | |
| 133 /// <summary> | |
| 134 /// Returns the data provider name. | |
| 135 /// </summary> | |
| 136 /// <remarks> | |
| 137 /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example. | |
| 138 /// </remarks> | |
| 139 /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataProvider Method</seealso> | |
| 140 /// <value>Data provider name.</value> | |
| 141 public override string Name | |
| 142 { | |
| 143 get { return "SQLite"; } | |
| 144 } | |
| 145 | |
| 146 public class SQLiteMappingSchema : Mapping.MappingSchema | |
| 147 { | |
| 148 #region Convert | |
| 149 | |
| 150 public override XmlReader ConvertToXmlReader(object value) | |
| 151 { | |
| 152 if (value is byte[]) | |
| 153 value = Encoding.UTF8.GetString((byte[])value); | |
| 154 | |
| 155 return base.ConvertToXmlReader(value); | |
| 156 } | |
| 157 | |
| 158 public override XmlDocument ConvertToXmlDocument(object value) | |
| 159 { | |
| 160 if (value is byte[]) | |
| 161 value = Encoding.UTF8.GetString((byte[])value); | |
| 162 | |
| 163 return base.ConvertToXmlDocument(value); | |
| 164 } | |
| 165 | |
| 166 #endregion | |
| 167 } | |
| 168 } | |
| 169 } |
