コード例 #1
0
		private IEnumerable<KeyValuePair<ResultInfo, IReadOnlyList<ColumnHeader>>> AcquireImplicitRefCursors(OracleCommand command)
		{
#if ORACLE_MANAGED_DATA_ACCESS_CLIENT
			yield break;
#else

			if (command.ImplicitRefCursors == null)
			{
				yield break;
			}

			for (var i = 0; i < command.ImplicitRefCursors.Length; i++)
			{
				var cursorInfo =
					new RefCursorInfo
					{
						CursorName = $"Implicit cursor {i + 1}",
						ImplicitCursorIndex = i
					};

				var refCursor = command.ImplicitRefCursors[i];
				if (!refCursor.IsNull)
				{
					yield return AcquireRefCursor(command, refCursor, cursorInfo);
				}
			}
#endif
		}
コード例 #2
0
		private KeyValuePair<ResultInfo, IReadOnlyList<ColumnHeader>> AcquireRefCursor(OracleCommand command, OracleRefCursor refCursor, RefCursorInfo refCursorInfo)
		{
			var reader = refCursor.GetDataReader();
			var resultInfo = new ResultInfo($"RefCursor{reader.GetHashCode()}", refCursorInfo.CursorName, ResultIdentifierType.UserDefined);

			_commandReaders.Add(resultInfo, new CommandReader { Reader = reader, Command = command, RefCursorInfo = refCursorInfo } );
			return new KeyValuePair<ResultInfo, IReadOnlyList<ColumnHeader>>(resultInfo, GetColumnHeadersFromReader(reader));
		}
コード例 #3
0
		private IEnumerable<KeyValuePair<ResultInfo, IReadOnlyList<ColumnHeader>>> UpdateBindVariables(StatementExecutionModel executionModel, OracleCommand userCommand)
		{
			var bindVariableModels = executionModel.BindVariables.ToDictionary(v => v.Name, v => v);
			foreach (OracleParameter parameter in userCommand.Parameters)
			{
				var bindVariableModel = bindVariableModels[parameter.ParameterName];

				var value = parameter.Value;
				if (parameter.Value is OracleDecimal)
				{
					var oracleNumber = new OracleNumber((OracleDecimal)parameter.Value);
					value = oracleNumber.IsNull ? String.Empty : oracleNumber.ToSqlLiteral();
				}

				if (parameter.Value is OracleString)
				{
					var oracleString = (OracleString)parameter.Value;
					value = oracleString.IsNull ? String.Empty : oracleString.Value;
				}

				if (parameter.Value is OracleDate)
				{
					var oracleDate = (OracleDate)parameter.Value;
					value = oracleDate.IsNull ? (DateTime?)null : oracleDate.Value;
				}

				if (parameter.Value is OracleTimeStamp)
				{
					var oracleTimeStamp = (OracleTimeStamp)parameter.Value;
					value = oracleTimeStamp.IsNull ? (DateTime?)null : oracleTimeStamp.Value;
				}

				if (!bindVariableModel.IsFilePath)
				{
					if (parameter.Value is OracleBinary)
					{
						var oracleBinary = (OracleBinary)parameter.Value;
						value = oracleBinary.IsNull ? null : oracleBinary.Value.ToHexString();
					}

					var clob = parameter.Value as OracleClob;
					if (clob != null)
					{
						value = clob.IsNull ? String.Empty : clob.Value;
					}

					var blob = parameter.Value as OracleBlob;
					if (blob != null)
					{
						value = blob.IsNull ? null : blob.Value.ToHexString();
					}
				}

				var refCursor = parameter.Value as OracleRefCursor;
				if (refCursor != null)
				{
					if (refCursor.IsNull)
					{
						continue;
					}

					var refCursorInfo =
						new RefCursorInfo
						{
							CursorName = parameter.ParameterName,
							Parameter = parameter
						};

					yield return AcquireRefCursor(userCommand, refCursor, refCursorInfo);
				}
				else
				{
					if (!bindVariableModel.IsFilePath)
					{
						bindVariableModel.Value = value;
					}
				}
			}
		}