-/*\r
- * Firebird ADO.NET Data provider for .NET and Mono \r
- * \r
- * The contents of this file are subject to the Initial \r
- * Developer's Public License Version 1.0 (the "License"); \r
- * you may not use this file except in compliance with the \r
- * License. You may obtain a copy of the License at \r
- * http://www.firebirdsql.org/index.php?op=doc&id=idpl\r
- *\r
- * Software distributed under the License is distributed on \r
- * an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either \r
- * express or implied. See the License for the specific \r
- * language governing rights and limitations under the License.\r
- * \r
- * Copyright (c) 2002, 2005 Carlos Guzman Alvarez\r
- * All Rights Reserved.\r
- */\r
-\r
-using System;\r
-using System.Globalization;\r
-\r
-namespace FirebirdSql.Data.Common\r
-{\r
- internal sealed class DbValue\r
- {\r
- #region Fields\r
-\r
- private StatementBase statement;\r
- private DbField field;\r
- private object value;\r
-\r
- #endregion\r
-\r
- #region Properties\r
-\r
- public DbField Field\r
- {\r
- get { return this.field; }\r
- }\r
-\r
- public object Value\r
- {\r
- get { return this.GetValue(); }\r
- set { this.value = value; }\r
- }\r
-\r
- #endregion\r
-\r
- #region Constructor\r
-\r
- public DbValue(DbField field, object value)\r
- {\r
- this.field = field;\r
- this.value = (value == null) ? System.DBNull.Value : value;\r
- }\r
-\r
- public DbValue(StatementBase statement, DbField field)\r
- {\r
- this.statement = statement;\r
- this.field = field;\r
- this.value = field.Value;\r
- }\r
-\r
- public DbValue(StatementBase statement, DbField field, object value)\r
- {\r
- this.statement = statement;\r
- this.field = field;\r
- this.value = (value == null) ? System.DBNull.Value : value;\r
- }\r
-\r
- #endregion\r
-\r
- #region Methods\r
-\r
- public bool IsDBNull()\r
- {\r
- if (this.value == null || this.value == System.DBNull.Value)\r
- {\r
- return true;\r
- }\r
- else\r
- {\r
- return false;\r
- }\r
- }\r
-\r
- public string GetString()\r
- {\r
- if (this.Field.DbDataType == DbDataType.Text && this.value is long)\r
- {\r
- this.value = this.GetClobData((long)this.value);\r
- }\r
-\r
- return this.value.ToString();\r
- }\r
-\r
- public char GetChar()\r
- {\r
- return Convert.ToChar(this.value, CultureInfo.CurrentCulture);\r
- }\r
-\r
- public bool GetBoolean()\r
- {\r
- return Convert.ToBoolean(this.value, CultureInfo.InvariantCulture);\r
- }\r
-\r
- public byte GetByte()\r
- {\r
- return Convert.ToByte(this.value, CultureInfo.InvariantCulture);\r
- }\r
-\r
- public short GetInt16()\r
- {\r
- return Convert.ToInt16(this.value, CultureInfo.InvariantCulture);\r
- }\r
-\r
- public int GetInt32()\r
- {\r
- return Convert.ToInt32(this.value, CultureInfo.InvariantCulture);\r
- }\r
-\r
- public long GetInt64()\r
- {\r
- return Convert.ToInt64(this.value, CultureInfo.InvariantCulture);\r
- }\r
-\r
- public decimal GetDecimal()\r
- {\r
- return Convert.ToDecimal(this.value, CultureInfo.InvariantCulture);\r
- }\r
-\r
- public float GetFloat()\r
- {\r
- return Convert.ToSingle(this.value, CultureInfo.InvariantCulture);\r
- }\r
-\r
- public Guid GetGuid()\r
- {\r
- if (this.Value is Guid)\r
- {\r
- return (Guid)this.Value;\r
- }\r
- else if (this.Value is byte[])\r
- {\r
- return new Guid((byte[])this.value);\r
- }\r
-\r
- throw new InvalidOperationException("Incorrect Guid value");\r
- }\r
-\r
- public double GetDouble()\r
- {\r
- return Convert.ToDouble(this.value, CultureInfo.InvariantCulture);\r
- }\r
-\r
- public DateTime GetDateTime()\r
- {\r
- return Convert.ToDateTime(this.value, CultureInfo.CurrentCulture.DateTimeFormat);\r
- }\r
-\r
- public Array GetArray()\r
- {\r
- if (this.value is long)\r
- {\r
- this.value = this.GetArrayData((long)this.value);\r
- }\r
-\r
- return (Array)this.value;\r
- }\r
-\r
- public byte[] GetBinary()\r
- {\r
- if (this.value is long)\r
- {\r
- this.value = this.GetBlobData((long)this.value);\r
- }\r
- return (byte[])this.value;\r
- }\r
-\r
- public int EncodeDate()\r
- {\r
- return TypeEncoder.EncodeDate(this.GetDateTime());\r
- }\r
-\r
- public int EncodeTime()\r
- {\r
- return TypeEncoder.EncodeTime(this.GetDateTime());\r
- }\r
-\r
- #endregion\r
-\r
- #region Private Methods\r
-\r
- private object GetValue()\r
- {\r
- if (this.IsDBNull())\r
- {\r
- return System.DBNull.Value;\r
- }\r
-\r
- switch (this.field.DbDataType)\r
- {\r
- case DbDataType.Text:\r
- if (this.statement == null)\r
- {\r
- return this.GetInt64();\r
- }\r
- else\r
- {\r
- return this.GetString();\r
- }\r
-\r
- case DbDataType.Binary:\r
- if (this.statement == null)\r
- {\r
- return this.GetInt64();\r
- }\r
- else\r
- {\r
- return this.GetBinary();\r
- }\r
-\r
- case DbDataType.Array:\r
- if (this.statement == null)\r
- {\r
- return this.GetInt64();\r
- }\r
- else\r
- {\r
- return this.GetArray();\r
- }\r
-\r
- default:\r
- return this.value;\r
- }\r
- }\r
-\r
- private string GetClobData(long blobId)\r
- {\r
- BlobBase clob = this.statement.CreateBlob(blobId);\r
-\r
- return clob.ReadString();\r
- }\r
-\r
- private byte[] GetBlobData(long blobId)\r
- {\r
- BlobBase blob = this.statement.CreateBlob(blobId);\r
-\r
- return blob.Read();\r
- }\r
-\r
- private Array GetArrayData(long handle)\r
- {\r
- if (this.field.ArrayHandle == null)\r
- {\r
- this.field.ArrayHandle = this.statement.CreateArray(handle, this.Field.Relation, this.Field.Name);\r
- }\r
-\r
- ArrayBase gdsArray = this.statement.CreateArray(this.field.ArrayHandle.Descriptor);\r
- \r
- gdsArray.Handle = handle;\r
- gdsArray.DB = this.statement.DB;\r
- gdsArray.Transaction = this.statement.Transaction;\r
-\r
- return gdsArray.Read();\r
- }\r
-\r
- #endregion\r
- }\r
+/*
+ * Firebird ADO.NET Data provider for .NET and Mono
+ *
+ * The contents of this file are subject to the Initial
+ * Developer's Public License Version 1.0 (the "License");
+ * you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ * http://www.firebirdsql.org/index.php?op=doc&id=idpl
+ *
+ * Software distributed under the License is distributed on
+ * an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either
+ * express or implied. See the License for the specific
+ * language governing rights and limitations under the License.
+ *
+ * Copyright (c) 2002, 2005 Carlos Guzman Alvarez
+ * All Rights Reserved.
+ */
+
+using System;
+using System.Globalization;
+
+namespace FirebirdSql.Data.Common
+{
+ internal sealed class DbValue
+ {
+ #region Fields
+
+ private StatementBase statement;
+ private DbField field;
+ private object value;
+
+ #endregion
+
+ #region Properties
+
+ public DbField Field
+ {
+ get { return this.field; }
+ }
+
+ public object Value
+ {
+ get { return this.GetValue(); }
+ set { this.value = value; }
+ }
+
+ #endregion
+
+ #region Constructor
+
+ public DbValue(DbField field, object value)
+ {
+ this.field = field;
+ this.value = (value == null) ? System.DBNull.Value : value;
+ }
+
+ public DbValue(StatementBase statement, DbField field)
+ {
+ this.statement = statement;
+ this.field = field;
+ this.value = field.Value;
+ }
+
+ public DbValue(StatementBase statement, DbField field, object value)
+ {
+ this.statement = statement;
+ this.field = field;
+ this.value = (value == null) ? System.DBNull.Value : value;
+ }
+
+ #endregion
+
+ #region Methods
+
+ public bool IsDBNull()
+ {
+ if (this.value == null || this.value == System.DBNull.Value)
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ public string GetString()
+ {
+ if (this.Field.DbDataType == DbDataType.Text && this.value is long)
+ {
+ this.value = this.GetClobData((long)this.value);
+ }
+
+ return this.value.ToString();
+ }
+
+ public char GetChar()
+ {
+ return Convert.ToChar(this.value, CultureInfo.CurrentCulture);
+ }
+
+ public bool GetBoolean()
+ {
+ return Convert.ToBoolean(this.value, CultureInfo.InvariantCulture);
+ }
+
+ public byte GetByte()
+ {
+ return Convert.ToByte(this.value, CultureInfo.InvariantCulture);
+ }
+
+ public short GetInt16()
+ {
+ return Convert.ToInt16(this.value, CultureInfo.InvariantCulture);
+ }
+
+ public int GetInt32()
+ {
+ return Convert.ToInt32(this.value, CultureInfo.InvariantCulture);
+ }
+
+ public long GetInt64()
+ {
+ return Convert.ToInt64(this.value, CultureInfo.InvariantCulture);
+ }
+
+ public decimal GetDecimal()
+ {
+ return Convert.ToDecimal(this.value, CultureInfo.InvariantCulture);
+ }
+
+ public float GetFloat()
+ {
+ return Convert.ToSingle(this.value, CultureInfo.InvariantCulture);
+ }
+
+ public Guid GetGuid()
+ {
+ if (this.Value is Guid)
+ {
+ return (Guid)this.Value;
+ }
+ else if (this.Value is byte[])
+ {
+ return new Guid((byte[])this.value);
+ }
+
+ throw new InvalidOperationException("Incorrect Guid value");
+ }
+
+ public double GetDouble()
+ {
+ return Convert.ToDouble(this.value, CultureInfo.InvariantCulture);
+ }
+
+ public DateTime GetDateTime()
+ {
+ return Convert.ToDateTime(this.value, CultureInfo.CurrentCulture.DateTimeFormat);
+ }
+
+ public Array GetArray()
+ {
+ if (this.value is long)
+ {
+ this.value = this.GetArrayData((long)this.value);
+ }
+
+ return (Array)this.value;
+ }
+
+ public byte[] GetBinary()
+ {
+ if (this.value is long)
+ {
+ this.value = this.GetBlobData((long)this.value);
+ }
+ return (byte[])this.value;
+ }
+
+ public int EncodeDate()
+ {
+ return TypeEncoder.EncodeDate(this.GetDateTime());
+ }
+
+ public int EncodeTime()
+ {
+ return TypeEncoder.EncodeTime(this.GetDateTime());
+ }
+
+ #endregion
+
+ #region Private Methods
+
+ private object GetValue()
+ {
+ if (this.IsDBNull())
+ {
+ return System.DBNull.Value;
+ }
+
+ switch (this.field.DbDataType)
+ {
+ case DbDataType.Text:
+ if (this.statement == null)
+ {
+ return this.GetInt64();
+ }
+ else
+ {
+ return this.GetString();
+ }
+
+ case DbDataType.Binary:
+ if (this.statement == null)
+ {
+ return this.GetInt64();
+ }
+ else
+ {
+ return this.GetBinary();
+ }
+
+ case DbDataType.Array:
+ if (this.statement == null)
+ {
+ return this.GetInt64();
+ }
+ else
+ {
+ return this.GetArray();
+ }
+
+ default:
+ return this.value;
+ }
+ }
+
+ private string GetClobData(long blobId)
+ {
+ BlobBase clob = this.statement.CreateBlob(blobId);
+
+ return clob.ReadString();
+ }
+
+ private byte[] GetBlobData(long blobId)
+ {
+ BlobBase blob = this.statement.CreateBlob(blobId);
+
+ return blob.Read();
+ }
+
+ private Array GetArrayData(long handle)
+ {
+ if (this.field.ArrayHandle == null)
+ {
+ this.field.ArrayHandle = this.statement.CreateArray(handle, this.Field.Relation, this.Field.Name);
+ }
+
+ ArrayBase gdsArray = this.statement.CreateArray(this.field.ArrayHandle.Descriptor);
+
+ gdsArray.Handle = handle;
+ gdsArray.DB = this.statement.DB;
+ gdsArray.Transaction = this.statement.Transaction;
+
+ return gdsArray.Read();
+ }
+
+ #endregion
+ }
}
\ No newline at end of file