diff Source/Data/DataProvider/DB2DataProvider.cs @ 0:f990fcb411a9

Копия текущей версии из github
author cin
date Thu, 27 Mar 2014 21:46:09 +0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Source/Data/DataProvider/DB2DataProvider.cs	Thu Mar 27 21:46:09 2014 +0400
@@ -0,0 +1,86 @@
+using System;
+using System.Data;
+using System.Data.Common;
+
+using IBM.Data.DB2;
+
+namespace BLToolkit.Data.DataProvider
+{
+	using Sql.SqlProvider;
+
+	public class DB2DataProvider :  DataProviderBase
+	{
+		public override IDbConnection CreateConnectionObject () { return new DB2Connection (); }
+		public override DbDataAdapter CreateDataAdapterObject() { return new DB2DataAdapter(); }
+		public override ISqlProvider  CreateSqlProvider      () { return new DB2SqlProvider(); }
+
+		public override Type   ConnectionType { get { return typeof(DB2Connection);         } }
+		public override string Name           { get { return DataProvider.ProviderName.DB2; } }
+
+		public override bool DeriveParameters(IDbCommand command)
+		{
+			if (command is DB2Command)
+			{
+				DB2CommandBuilder.DeriveParameters((DB2Command)command);
+				return true;
+			}
+
+			return false;
+		}
+
+		public override object Convert(object value, ConvertType convertType)
+		{
+			switch (convertType)
+			{
+				case ConvertType.ExceptionToErrorNumber:
+					if (value is DB2Exception)
+					{
+						var ex = (DB2Exception)value;
+
+						foreach (DB2Error error in ex.Errors)
+							return error.RowNumber;
+
+						return 0;
+					}
+
+					break;
+				 
+			}
+
+			return SqlProvider.Convert(value, convertType);
+		}
+
+		public override void PrepareCommand(ref CommandType commandType, ref string commandText, ref IDbDataParameter[] commandParameters)
+		{
+			base.PrepareCommand(ref commandType, ref commandText, ref commandParameters);
+
+			if (commandParameters != null) foreach (var p in commandParameters)
+			{
+				if (p.Value is bool)
+					p.Value = (bool)p.Value ? 1 : 0;
+				else if (p.Value is Guid)
+				{
+					p.Value  = ((Guid)p.Value).ToByteArray();
+					p.DbType = DbType.Binary;
+					p.Size   = 16;
+				}
+			}
+		}
+
+		/*
+		public override int ExecuteArray(IDbCommand command, int iterations)
+		{
+			var cmd = (DB2Command)command;
+			try
+			{
+				cmd.ArrayBindCount = iterations;
+				return cmd.ExecuteNonQuery();
+			}
+			finally
+			{
+				cmd.ArrayBindCount = 0;
+			}
+		}
+		*/
+	}
+}