adoconnectionwrapper.cs

来自「SharpDevelop2.0.0 c#开发免费工具」· CS 代码 · 共 554 行 · 第 1/2 页

CS
554
字号
					case DbType.Time: ret = ADODB.DataTypeEnum.adDBTime; break;
					case DbType.UInt16: ret = ADODB.DataTypeEnum.adUnsignedSmallInt; break;
					case DbType.UInt32: ret = ADODB.DataTypeEnum.adUnsignedInt; break;
					case DbType.UInt64: ret = ADODB.DataTypeEnum.adUnsignedBigInt; break;
					case DbType.VarNumeric: ret = ADODB.DataTypeEnum.adVarNumeric; break;
					default: throw new ArgumentOutOfRangeException("t");
			}

			return ret;
		}



		///<summary>
		/// Execute a stocked procedure.
		/// <param name="schema">
		/// <see cref="SharpQuery.SchemaClass">SchemaClass</see> object.
		/// </param>
		/// <param name="rows">
		/// Maximum number of row to extract. If is "0" then all rows are extracted.
		/// </param>
		/// <returns> return a <see cref="System.Data.DataTable">DataTable</see>
		///or a <see cref="System.Data.DataSet">DataSet</see> object.
		/// </returns>
		/// </summary>
		public override object ExecuteProcedure(ISchemaClass schema, int rows, SharpQuerySchemaClassCollection parameters)
		{
			DataTable table = null;

			if (schema == null)
			{
				throw new System.ArgumentNullException("schema");
			}

			ADODB.Recordset record = null;
			ADODB.Command command = new ADODB.Command();
			command.ActiveConnection = this.pADOConnection;
			ADODB.Parameter para = null;

			command.CommandText = schema.Name;
			command.CommandType = ADODB.CommandTypeEnum.adCmdStoredProc;

			if (parameters != null)
			{
				foreach (SharpQueryParameter classParam in parameters)
				{
					para = new ADODB.Parameter();
					para.Type = DbTypeToDataType(classParam.DataType);
					para.Direction = ParamDirectionToADODirection(classParam.Type);
					para.Name = classParam.Name;
					if (para.Name.StartsWith("["))
					{
						para.Name = para.Name.Remove(0, 1);
					}
					if (para.Name.EndsWith("]"))
					{
						para.Name = para.Name.Remove(para.Name.Length - 1, 1);
					}
					para.Value = classParam.Value;
					command.Parameters.Append(para);
				}
			}

			this.pADOConnection.BeginTrans();

			try
			{
				record = (ADODB.Recordset)command.GetType().InvokeMember(
				                                                         "Execute",
				                                                         System.Reflection.BindingFlags.InvokeMethod,
				                                                         null,
				                                                         command,
				                                                         null);

				//record.MaxRecords = rows;
				table = RecordSetToDataTable(record);

				//Procedure is ReadOnly
				table.DefaultView.AllowDelete = false;
				table.DefaultView.AllowEdit = false;
				table.DefaultView.AllowNew = false;
			}
			catch (System.Exception e)
			{
				if (schema != null)
				{
					this.pADOConnection.RollbackTrans();

					string mes = schema.Name + "\n\r";

					foreach (ADODB.Error err in this.pADOConnection.Errors)
					{
						mes += "-----------------\n\r";
						mes += err.Description + "\n\r";
						mes += err.NativeError + "\n\r";
					}
					throw new ExecuteProcedureException(mes);
				}
				else
				{
					throw new ExecuteProcedureException(e.Message);
				}
			}

			this.pADOConnection.CommitTrans();

			return table;
		}

		///<summary>
		/// check the internal connection object is valid
		/// Throw an exception if pADOConnection == null
		///</summary>
		protected override void CheckConnectionObject()
		{
			if (this.pADOConnection == null)
				throw new ArgumentNullException("pADONETConnection");
		}

		protected DataTable RecordSetToDataTable(ADODB.Recordset record)
		{
			OleDbDataAdapter custDA = new OleDbDataAdapter();
			DataTable custTable = new DataTable();
			custDA.Fill(custTable, record);
			return custTable;
		}

		protected override DataTable GetSchema(SharpQuerySchemaEnum schema, object[] restrictions)
		{
			ADODB.SchemaEnum internalSchema = 0;
			ADODB.Recordset ADOrecord = null;

			switch (schema)
			{
				case SharpQuerySchemaEnum.Asserts:
					internalSchema = ADODB.SchemaEnum.adSchemaAsserts;
					break;
				case SharpQuerySchemaEnum.Catalogs:
					internalSchema = ADODB.SchemaEnum.adSchemaCatalogs;
					break;
				case SharpQuerySchemaEnum.CharacterSets:
					internalSchema = ADODB.SchemaEnum.adSchemaCharacterSets;
					break;
				case SharpQuerySchemaEnum.CheckConstraints:
					internalSchema = ADODB.SchemaEnum.adSchemaCheckConstraints;
					break;
				case SharpQuerySchemaEnum.Collations:
					internalSchema = ADODB.SchemaEnum.adSchemaCollations;
					break;
				case SharpQuerySchemaEnum.ColumnPrivileges:
					internalSchema = ADODB.SchemaEnum.adSchemaColumnPrivileges;
					break;
				case SharpQuerySchemaEnum.Columns:
					internalSchema = ADODB.SchemaEnum.adSchemaColumns;
					break;
				case SharpQuerySchemaEnum.ColumnsDomainUsage:
					internalSchema = ADODB.SchemaEnum.adSchemaColumnsDomainUsage;
					break;
				case SharpQuerySchemaEnum.ConstraintColumnUsage:
					internalSchema = ADODB.SchemaEnum.adSchemaConstraintColumnUsage;
					break;
				case SharpQuerySchemaEnum.ConstaintTableUsage:
					internalSchema = ADODB.SchemaEnum.adSchemaConstraintTableUsage;
					break;
				case SharpQuerySchemaEnum.Cubes:
					internalSchema = ADODB.SchemaEnum.adSchemaCubes;
					break;
				case SharpQuerySchemaEnum.DBInfoKeyWords:
					internalSchema = ADODB.SchemaEnum.adSchemaDBInfoKeywords;
					break;
				case SharpQuerySchemaEnum.DBInfoLiterals:
					internalSchema = ADODB.SchemaEnum.adSchemaDBInfoLiterals;
					break;
				case SharpQuerySchemaEnum.Dimensions:
					internalSchema = ADODB.SchemaEnum.adSchemaDimensions;
					break;
				case SharpQuerySchemaEnum.ForeignKeys:
					internalSchema = ADODB.SchemaEnum.adSchemaForeignKeys;
					break;
				case SharpQuerySchemaEnum.Hierarchies:
					internalSchema = ADODB.SchemaEnum.adSchemaHierarchies;
					break;
				case SharpQuerySchemaEnum.Indexes:
					internalSchema = ADODB.SchemaEnum.adSchemaIndexes;
					break;
				case SharpQuerySchemaEnum.KeyColumnUsage:
					internalSchema = ADODB.SchemaEnum.adSchemaKeyColumnUsage;
					break;
				case SharpQuerySchemaEnum.Levels:
					internalSchema = ADODB.SchemaEnum.adSchemaLevels;
					break;
				case SharpQuerySchemaEnum.Measures:
					internalSchema = ADODB.SchemaEnum.adSchemaMeasures;
					break;
				case SharpQuerySchemaEnum.Members:
					internalSchema = ADODB.SchemaEnum.adSchemaMembers;
					break;
				case SharpQuerySchemaEnum.Null:
					break;
				case SharpQuerySchemaEnum.PrimaryKeys:
					internalSchema = ADODB.SchemaEnum.adSchemaPrimaryKeys;
					break;
				case SharpQuerySchemaEnum.ProcedureColumns:
					internalSchema = ADODB.SchemaEnum.adSchemaProcedureColumns;
					break;
				case SharpQuerySchemaEnum.ProcedureParameters:
					internalSchema = ADODB.SchemaEnum.adSchemaProcedureParameters;
					break;
				case SharpQuerySchemaEnum.Procedures:
					internalSchema = ADODB.SchemaEnum.adSchemaProcedures;
					break;
				case SharpQuerySchemaEnum.Properties:
					internalSchema = ADODB.SchemaEnum.adSchemaProperties;
					break;
				case SharpQuerySchemaEnum.ProviderTypes:
					internalSchema = ADODB.SchemaEnum.adSchemaProviderTypes;
					break;
				case SharpQuerySchemaEnum.ReferentialConstraints:
					internalSchema = ADODB.SchemaEnum.adSchemaReferentialConstraints;
					break;
				case SharpQuerySchemaEnum.Schemata:
					internalSchema = ADODB.SchemaEnum.adSchemaSchemata;
					break;
				case SharpQuerySchemaEnum.SQLLanguages:
					internalSchema = ADODB.SchemaEnum.adSchemaSQLLanguages;
					break;
				case SharpQuerySchemaEnum.Statistics:
					internalSchema = ADODB.SchemaEnum.adSchemaStatistics;
					break;
				case SharpQuerySchemaEnum.TableConstraints:
					internalSchema = ADODB.SchemaEnum.adSchemaTableConstraints;
					break;
				case SharpQuerySchemaEnum.TablePrivileges:
					internalSchema = ADODB.SchemaEnum.adSchemaTablePrivileges;
					break;
				case SharpQuerySchemaEnum.Tables:
				case SharpQuerySchemaEnum.Views:
					internalSchema = ADODB.SchemaEnum.adSchemaTables;
					break;
				case SharpQuerySchemaEnum.Tanslations:
					internalSchema = ADODB.SchemaEnum.adSchemaTranslations;
					break;
				case SharpQuerySchemaEnum.Trustees:
					internalSchema = ADODB.SchemaEnum.adSchemaTrustees;
					break;
				case SharpQuerySchemaEnum.UsagePrivileges:
					internalSchema = ADODB.SchemaEnum.adSchemaUsagePrivileges;
					break;
				case SharpQuerySchemaEnum.ViewColumnUsage:
					internalSchema = ADODB.SchemaEnum.adSchemaViewColumnUsage;
					break;
				case SharpQuerySchemaEnum.ViewColumns:
					internalSchema = ADODB.SchemaEnum.adSchemaColumns;
					break;
				case SharpQuerySchemaEnum.ViewTableUsage:
					internalSchema = ADODB.SchemaEnum.adSchemaViewTableUsage;
					break;
				default:
					throw new System.ArgumentException("", "schema");
			}

			if (schema != SharpQuerySchemaEnum.Null)
			{
				ADOrecord = (ADODB.Recordset)this.pADOConnection.GetType().InvokeMember(
				                                                                        "OpenSchema",
				                                                                        System.Reflection.BindingFlags.InvokeMethod,
				                                                                        null,
				                                                                        this.pADOConnection,
				                                                                        new Object[] { internalSchema, this.NormalizeRestrictions(restrictions) });
			}

			return RecordSetToDataTable(ADOrecord);
		}

	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?